From a73feea9586ad29eaff8002cfd076c1ea32ab36a Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Mon, 22 Apr 2024 06:28:53 +0200
Subject: [PATCH] update project

---
 README.md                                     |   2 +-
 mkp/check_radius-0.0.1-20240421.mkp           | Bin 0 -> 8405 bytes
 source/checkman/.gitkeep                      |   0
 source/checkman/check_radius                  |  45 --
 source/checks/check_radius                    |  52 ++
 source/gui/metrics/check_radius.py            |  43 ++
 .../gui/wato/check_parameters/check_radius.py | 102 ++++
 source/lib/nagios/plugins/check_radius        | 142 ++++++
 source/lib/nagios/plugins/dictionary          | 446 ++++++++++++++++++
 .../lib/nagios/plugins/dictionary.freeradius  |  91 ++++
 source/packages/check_radius                  |  15 +
 11 files changed, 892 insertions(+), 46 deletions(-)
 create mode 100644 mkp/check_radius-0.0.1-20240421.mkp
 delete mode 100644 source/checkman/.gitkeep
 delete mode 100644 source/checkman/check_radius
 create mode 100644 source/checks/check_radius
 create mode 100644 source/gui/metrics/check_radius.py
 create mode 100644 source/gui/wato/check_parameters/check_radius.py
 create mode 100755 source/lib/nagios/plugins/check_radius
 create mode 100644 source/lib/nagios/plugins/dictionary
 create mode 100644 source/lib/nagios/plugins/dictionary.freeradius
 create mode 100644 source/packages/check_radius

diff --git a/README.md b/README.md
index 9209cf4..5df5a6c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/packagee-0.1.2-20230706.mkp "package-0.1.2-20230706.mkp"
+[PACKAGE]: ../../raw/master/mkp/check_radius-0.0.1-20240421.mkp "check_radius-0.0.1-20240421.mkp"
 # Title
 
 A short description about the plugin
diff --git a/mkp/check_radius-0.0.1-20240421.mkp b/mkp/check_radius-0.0.1-20240421.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..af3d90c0c5fe60838831d11bca1d6c24e26a01dc
GIT binary patch
literal 8405
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

literal 0
HcmV?d00001

diff --git a/source/checkman/.gitkeep b/source/checkman/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/source/checkman/check_radius b/source/checkman/check_radius
deleted file mode 100644
index 08ef898..0000000
--- a/source/checkman/check_radius
+++ /dev/null
@@ -1,45 +0,0 @@
-title: Dummy check man page - used as template for new check manuals
-agents: linux, windows, aix, solaris, hpux, vms, freebsd, snmp
-catalog: see modules/catalog.py for possible values
-license: GPL
-distribution: check_mk
-description:
- Describe here: (1) what the check actually does, (2) under which
- circumstances it goes warning/critical, (3) which devices are supported
- by the check, (4) if the check requires a separated plugin or
- tool or separate configuration on the target host.
-
-item:
- Describe the syntax and meaning of the check's item here. Provide all
- information one needs if coding a manual check with {checks +=} in {main.mk}.
- Give an example.  If the check uses {None} as sole item,
- then leave out this section.
-
-examples:
- # Give examples for configuration in {main.mk} here. If the check has
- # configuration variable, then give example for them here.
-
- # set default levels to 40 and 60 percent:
- foo_default_values = (40, 60)
-
- # another configuration variable here:
- inventory_foo_filter = [ "superfoo", "superfoo2" ]
-
-perfdata:
- Describe precisely the number and meaning of performance variables
- the check sends. If it outputs no performance data, then leave out this
- section.
-
-inventory:
- Describe how the inventory for the check works. Which items
- will it find? Describe the influence of check specific
- configuration parameters to the inventory.
-
-[parameters]
-foofirst(int): describe the first parameter here (if parameters are grouped
-        as tuple)
-fooother(string): describe another parameter here.
-
-[configuration]
-foo_default_levels(int, int): Describe global configuration variable of
-    foo here. Important: also tell the user how they are preset.
diff --git a/source/checks/check_radius b/source/checks/check_radius
new file mode 100644
index 0000000..eaa316c
--- /dev/null
+++ b/source/checks/check_radius
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2024-04-21
+# File  : checks/check_radius
+#
+
+
+def check_radius_arguments(params):
+    args = []
+
+    if server := params.get('server'):
+        args.extend(['-H', server])
+    else:
+        args.append('-H $HOSTADDRESS$')
+
+    if auth_port := params.get("auth_port"):
+        args.extend(['--authport', auth_port])
+
+    if secret := params.get("secret"):
+        args.extend(["--secret", passwordstore_get_cmdline("%s", secret)])
+
+    if user_name := params.get("user_name"):
+        args.extend([f'--username', user_name])
+
+    if user_password := params.get("user_password"):
+        args.extend(["--password", passwordstore_get_cmdline("%s", user_password)])
+
+    if timeout := params.get('timeout'):
+        args.extend(['-timeout', timeout])
+
+    return args
+
+
+def _check_description(params):
+    if 'description' in params:
+        return f'RADIUS server {params["description"]}'
+
+    return 'RADIUS server'
+
+
+active_check_info['radius'] = {
+    'command_line': 'check_radius $ARG1$',
+    'argument_function': check_radius_arguments,
+    'service_description': _check_description,
+    'has_perfdata': True,
+}
diff --git a/source/gui/metrics/check_radius.py b/source/gui/metrics/check_radius.py
new file mode 100644
index 0000000..5c8cff2
--- /dev/null
+++ b/source/gui/metrics/check_radius.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2024-04-21
+# File  : metrics/check_radius.py
+#
+#
+
+from cmk.gui.i18n import _
+
+from cmk.gui.plugins.metrics.utils import (
+    metric_info,
+    graph_info,
+    perfometer_info
+)
+
+metric_info['radius_request_time'] = {
+    'title': _('Request time'),
+    'unit': 's',
+    'color': '#9a52bf',
+}
+
+graph_info['check_radius_time'] = {
+    'title': _('RADIUS request time'),
+    'metrics': [
+        ('radius_request_time', 'area'),
+    ],
+    'scalars': [
+        ('radius_request_time:crit', _('Crit')),
+        ('radius_request_time:warn', _('Warn')),
+    ],
+}
+
+perfometer_info.append({
+    'type': 'logarithmic',
+    'metric': 'radius_request_time',
+    'half_value': 1.0,
+    'exponent': 10.0,
+})
diff --git a/source/gui/wato/check_parameters/check_radius.py b/source/gui/wato/check_parameters/check_radius.py
new file mode 100644
index 0000000..d38398d
--- /dev/null
+++ b/source/gui/wato/check_parameters/check_radius.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2022-10-04
+# File  : wato/active_checks_radius.py
+#
+# 2024-01-01: modified for cmk 2.2.x
+
+from cmk.gui.i18n import _
+from cmk.gui.valuespec import (
+    Dictionary,
+    Integer,
+    TextAscii,
+    Transform,
+)
+
+from cmk.gui.plugins.wato.active_checks.common import RulespecGroupActiveChecks
+from cmk.gui.plugins.wato.utils import HostRulespec, rulespec_registry, IndividualOrStoredPassword
+
+
+def _valuespec_active_checks_radius():
+    return Transform(
+        Dictionary(
+            title=_('Check RADIUS service'),
+            help=_(''),
+            elements=[
+                ('description',
+                 TextAscii(
+                     title=_('Service description'),
+                     help=_(
+                         'Must be unique for every host. The service description starts always with \"RADIUS server\".'),
+                     size=50,
+                     placeholder='Item name for the service',
+                     allow_empty=False,
+                 )),
+                ('server',
+                 TextAscii(
+                     title=_('Server IP-address or name'),
+                     help=_(
+                         'Hostname or IP-address to monitor. Default is the host name/IP-Address of the monitored host.'
+                     ),
+                     size=50,
+                     allow_empty=False,
+                 )),
+                ('auth_port',
+                 Integer(
+                     title=_('RADIUS authentication port'),
+                     help=_('The RADIUS port to use for authentication. Default is 1812.'),
+                     # size=5,
+                     default_value=1812,
+                     minvalue=1,
+                     maxvalue=65535,
+                 )),
+                ('secret',
+                 IndividualOrStoredPassword(
+                     title=_('Server secret'),
+                     help=_('The RADIUS secret.'),
+                     # size=50,
+                     allow_empty=False,
+                 )),
+                ('timeout',
+                 Integer(
+                     title=_('Server timeout'),
+                     help=_('The user password.'),
+                     default_value=2,
+                     minvalue=1,
+                     maxvalue=30,
+                 )),
+                ('user_name',
+                 TextAscii(
+                     title=_('User name'),
+                     help=_('The user name to use in the request.'),
+                     size=50,
+                     placeholder='user name to use in the request',
+                     allow_empty=False,
+                 )),
+                ('user_password',
+                 IndividualOrStoredPassword(
+                     title=_('User password'),
+                     help=_('The user password.'),
+                     # size=50,
+                     allow_empty=False
+                 )),
+            ],
+            required_keys=['secret']
+        ),
+    )
+
+
+rulespec_registry.register(
+    HostRulespec(
+        group=RulespecGroupActiveChecks,
+        match_type='all',
+        name='active_checks:radius',
+        valuespec=_valuespec_active_checks_radius,
+    )
+)
diff --git a/source/lib/nagios/plugins/check_radius b/source/lib/nagios/plugins/check_radius
new file mode 100755
index 0000000..4680980
--- /dev/null
+++ b/source/lib/nagios/plugins/check_radius
@@ -0,0 +1,142 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2024-04-21
+# File  : active_checks_radius.py
+#
+# Active check to monitor radius servers.
+#
+# https://github.com/pyradius/pyrad
+#
+import socket
+
+from typing import Sequence
+import sys
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, Namespace, ArgumentTypeError
+from time import time_ns
+from os import environ
+
+import cmk.utils.password_store
+
+no_radiuslib = False
+try:
+    from pyrad.client import Client as rad_client
+    from pyrad.dictionary import Dictionary as rad_dictionary
+    import pyrad.packet
+except ModuleNotFoundError:
+    no_radiuslib = True
+
+
+def parse_arguments(argv: Sequence[str]) -> Namespace:
+    parser = ArgumentParser(
+        formatter_class=ArgumentDefaultsHelpFormatter,
+        epilog=''
+    )
+    parser.add_argument(
+        '-H', '--host', required=True,
+        help='Host/IP-Address of RADIUS server to query (required)')
+    parser.add_argument(
+        '--secret', required=True,
+        help='secret RADIUS key')
+    parser.add_argument(
+        '--username', default='dummyuser',
+        help='user name to test with')
+    parser.add_argument(
+        '--password', default='dummyuser',
+        help='user password to test with')
+    parser.add_argument(
+        '--authport', type=int, default=1812,
+        help='RADIUS authentication port to use.')
+    parser.add_argument(
+        '--timeout', type=int, default=1,
+        help='RADIUS server timeout.')
+
+    args = parser.parse_args(argv)
+    args.host = args.host.strip(' ')
+    return args
+
+
+def main(args=None):
+    if args is None:
+        args = sys.argv[1:]  # without the path/plugin itself
+
+    args = parse_arguments(args)
+
+    if no_radiuslib:
+        sys.stdout.write(
+            'To use this check plugin you need to install the python pyrad lib in your CMK python environment.\n'
+        )
+        sys.exit(3)
+
+    omd_root = environ["OMD_ROOT"]
+    info_text = ''
+    long_output = ''
+    perf_data = ''
+    status = 0
+
+    rad_server = rad_client(
+        server=args.host,
+        authport=args.authport,
+        secret=args.secret.encode('utf-8'),
+        dict=rad_dictionary(f'{omd_root}/local/lib/nagios/plugins/dictionary'),
+        timeout=args.timeout,
+    )
+
+    rad_req = rad_server.CreateAuthPacket(
+        code=pyrad.packet.AccessRequest,
+        User_Name=args.username,
+        NAS_Identifier=args.host,
+    )
+    rad_req["User-Password"] = rad_req.PwCrypt(args.password)
+    before_request_time = time_ns()
+    try:
+        response = rad_server.SendPacket(rad_req)
+    except pyrad.client.Timeout as e:
+        status = 2
+        info_text = 'Radius request timeout'
+        long_output += f'\nRadius request timeout.\n{e}'
+    except socket.error as e:
+        status = 2
+        info_text = 'Network error'
+        long_output += f'\nNetwork error\n{e}'
+    else:
+        request_time = (time_ns() - before_request_time) / 1000 / 1000 / 1000  # -> ns to seconds
+        match response.code:
+            case pyrad.packet.AccessAccept:
+                info_text += 'Response: access accept'
+                long_output += '\nResponse: access accept'
+                long_output += f'\nResponse code: {response.code}'
+                if response.has_key:
+                    long_output += f'\nNumber of attributes in response: {len(response.keys())}'
+                    long_output += f'\n\nResponse attributes:'
+                    for key in response.keys():
+                        long_output += f'\n{key}: {response.get(key)}'
+                else:
+                    long_output += f'\nNo attributes in response: {len(response.keys())}'
+            case pyrad.packet.AccessReject:
+                info_text += 'Response: access reject'
+                long_output += '\nResponse: access reject'
+                long_output += f'\nResponse code: {response.code}'
+            case _:
+                info_text += f'Response: code unknown'
+                long_output += f'\nResponse: code unknown'
+                long_output += f'\nResponse code: {response.code}'
+                status = 3
+
+        perf_data += f'radius_request_time={request_time}'
+
+    info_text = info_text.strip(',').strip(' ')
+    sys.stdout.write(f'{info_text}\n{long_output} | {perf_data}\n')
+
+    return status
+
+
+if __name__ == '__main__':
+    cmk.utils.password_store.replace_passwords()
+    exitcode = main()
+    sys.exit(exitcode)
diff --git a/source/lib/nagios/plugins/dictionary b/source/lib/nagios/plugins/dictionary
new file mode 100644
index 0000000..30fb528
--- /dev/null
+++ b/source/lib/nagios/plugins/dictionary
@@ -0,0 +1,446 @@
+#
+# Version $Id: dictionary,v 1.1.1.1 2002/10/11 12:25:39 wichert Exp $
+#
+#   for free radius dictionaries see:  /usr/share/freeradius
+#
+#	This file contains dictionary translations for parsing
+#	requests and generating responses.  All transactions are
+#	composed of Attribute/Value Pairs.  The value of each attribute
+#	is specified as one of 4 data types.  Valid data types are:
+#
+#	string  - 0-253 octets
+#	ipaddr  - 4 octets in network byte order
+#	integer - 32 bit value in big endian order (high byte first)
+#	date    - 32 bit value in big endian order - seconds since
+#					00:00:00 GMT,  Jan.  1,  1970
+#
+#	FreeRADIUS includes extended data types which are not defined
+#	in RFC 2865 or RFC 2866.  These data types are:
+#
+#	abinary - Ascend's binary filter format.
+#	octets  - raw octets, printed and input as hex strings.
+#		  e.g.: 0x123456789abcdef
+#
+#
+#	Enumerated values are stored in the user file with dictionary
+#	VALUE translations for easy administration.
+#
+#	Example:
+#
+#	ATTRIBUTE	  VALUE
+#	---------------   -----
+#	Framed-Protocol = PPP
+#	7		= 1	(integer encoding)
+#
+
+#
+#	Include compatibility dictionary for older users file. Move this
+#	directive to the end of the file if you want to see the old names
+#	in the logfiles too.
+#
+#$INCLUDE dictionary.compat	# compability issues
+#$INCLUDE dictionary.acc
+#$INCLUDE dictionary.ascend
+#$INCLUDE dictionary.bay
+#$INCLUDE dictionary.cisco
+#$INCLUDE dictionary.livingston
+#$INCLUDE dictionary.microsoft
+#$INCLUDE dictionary.quintum
+#$INCLUDE dictionary.redback
+#$INCLUDE dictionary.shasta
+#$INCLUDE dictionary.shiva
+#$INCLUDE dictionary.tunnel
+#$INCLUDE dictionary.usr
+#$INCLUDE dictionary.versanet
+#$INCLUDE dictionary.erx
+$INCLUDE dictionary.freeradius
+#$INCLUDE dictionary.alcatel
+
+#
+#	Following are the proper new names. Use these.
+#
+ATTRIBUTE	User-Name		1	string
+ATTRIBUTE	User-Password		2	string
+ATTRIBUTE	CHAP-Password		3	octets
+ATTRIBUTE	NAS-IP-Address		4	ipaddr
+ATTRIBUTE	NAS-Port		5	integer
+ATTRIBUTE	Service-Type		6	integer
+ATTRIBUTE	Framed-Protocol		7	integer
+ATTRIBUTE	Framed-IP-Address	8	ipaddr
+ATTRIBUTE	Framed-IP-Netmask	9	ipaddr
+ATTRIBUTE	Framed-Routing		10	integer
+ATTRIBUTE	Filter-Id		11	string
+ATTRIBUTE	Framed-MTU		12	integer
+ATTRIBUTE	Framed-Compression	13	integer
+ATTRIBUTE	Login-IP-Host		14	ipaddr
+ATTRIBUTE	Login-Service		15	integer
+ATTRIBUTE	Login-TCP-Port		16	integer
+ATTRIBUTE	Reply-Message		18	string
+ATTRIBUTE	Callback-Number		19	string
+ATTRIBUTE	Callback-Id		20	string
+ATTRIBUTE	Framed-Route		22	string
+ATTRIBUTE	Framed-IPX-Network	23	ipaddr
+ATTRIBUTE	State			24	octets
+ATTRIBUTE	Class			25	octets
+ATTRIBUTE	Vendor-Specific		26	octets
+ATTRIBUTE	Session-Timeout		27	integer
+ATTRIBUTE	Idle-Timeout		28	integer
+ATTRIBUTE	Termination-Action	29	integer
+ATTRIBUTE	Called-Station-Id	30	string
+ATTRIBUTE	Calling-Station-Id	31	string
+ATTRIBUTE	NAS-Identifier		32	string
+ATTRIBUTE	Proxy-State		33	octets
+ATTRIBUTE	Login-LAT-Service	34	string
+ATTRIBUTE	Login-LAT-Node		35	string
+ATTRIBUTE	Login-LAT-Group		36	octets
+ATTRIBUTE	Framed-AppleTalk-Link	37	integer
+ATTRIBUTE	Framed-AppleTalk-Network 38	integer
+ATTRIBUTE	Framed-AppleTalk-Zone	39	string
+
+ATTRIBUTE	Acct-Status-Type	40	integer
+ATTRIBUTE	Acct-Delay-Time		41	integer
+ATTRIBUTE	Acct-Input-Octets	42	integer
+ATTRIBUTE	Acct-Output-Octets	43	integer
+ATTRIBUTE	Acct-Session-Id		44	string
+ATTRIBUTE	Acct-Authentic		45	integer
+ATTRIBUTE	Acct-Session-Time	46	integer
+ATTRIBUTE       Acct-Input-Packets	47	integer
+ATTRIBUTE       Acct-Output-Packets	48	integer
+ATTRIBUTE	Acct-Terminate-Cause	49	integer
+ATTRIBUTE	Acct-Multi-Session-Id	50	string
+ATTRIBUTE	Acct-Link-Count		51	integer
+ATTRIBUTE	Acct-Input-Gigawords    52      integer
+ATTRIBUTE	Acct-Output-Gigawords   53      integer
+ATTRIBUTE	Event-Timestamp         55      date
+
+ATTRIBUTE	CHAP-Challenge		60	string
+ATTRIBUTE	NAS-Port-Type		61	integer
+ATTRIBUTE	Port-Limit		62	integer
+ATTRIBUTE	Login-LAT-Port		63	integer
+ATTRIBUTE   Tunnel-Type             64  integer
+ATTRIBUTE   Tunnel-Medium-Type      65  integer
+ATTRIBUTE   Tunnel-Client-Endpoint  66  string
+ATTRIBUTE   Tunnel-Server-Endpoint  67  string
+ATTRIBUTE	Acct-Tunnel-Connection	68	string
+ATTRIBUTE   Tunnel-Password         69  string
+
+ATTRIBUTE	ARAP-Password           70      string
+ATTRIBUTE	ARAP-Features           71      string
+ATTRIBUTE	ARAP-Zone-Access        72      integer
+ATTRIBUTE	ARAP-Security           73      integer
+ATTRIBUTE	ARAP-Security-Data      74      string
+ATTRIBUTE	Password-Retry          75      integer
+ATTRIBUTE	Prompt                  76      integer
+ATTRIBUTE	Connect-Info		77	string
+ATTRIBUTE	Configuration-Token	78	string
+ATTRIBUTE	EAP-Message		79	string
+ATTRIBUTE	Message-Authenticator	80	octets
+ATTRIBUTE   Tunnel-Private-Group-Id 81  string
+ATTRIBUTE   Tunnel-Assignment-Id    82  string
+ATTRIBUTE   Tunnel-Preference       83  integer
+ATTRIBUTE	ARAP-Challenge-Response	84	string	# 10 octets
+ATTRIBUTE	Acct-Interim-Interval   85      integer
+ATTRIBUTE	NAS-Port-Id		87	string
+ATTRIBUTE	Framed-Pool		88	string
+ATTRIBUTE	NAS-IPv6-Address	95	octets	# really IPv6
+ATTRIBUTE	Framed-Interface-Id	96	octets	# 8 octets
+ATTRIBUTE	Framed-IPv6-Prefix	97	ipv6prefix	# stupid format
+ATTRIBUTE	Login-IPv6-Host		98	octets	# really IPv6
+ATTRIBUTE	Framed-IPv6-Route	99	string
+ATTRIBUTE	Framed-IPv6-Pool	100	string
+ATTRIBUTE   Delegated-IPv6-Prefix   123     ipv6prefix
+
+
+ATTRIBUTE	Digest-Response		206	string
+ATTRIBUTE	Digest-Attributes	207	octets	# stupid format
+
+#
+#	Experimental Non Protocol Attributes used by Cistron-Radiusd
+#
+
+# 	These attributes CAN go in the reply item list.
+ATTRIBUTE	Fall-Through		500	integer
+ATTRIBUTE	Exec-Program		502	string
+ATTRIBUTE	Exec-Program-Wait	503	string
+
+#	These attributes CANNOT go in the reply item list.
+ATTRIBUTE	User-Category		1029	string
+ATTRIBUTE	Group-Name		1030	string
+ATTRIBUTE	Huntgroup-Name		1031	string
+ATTRIBUTE	Simultaneous-Use	1034	integer
+ATTRIBUTE	Strip-User-Name		1035	integer
+ATTRIBUTE	Hint			1040	string
+ATTRIBUTE	Pam-Auth		1041	string
+ATTRIBUTE	Login-Time		1042	string
+ATTRIBUTE	Stripped-User-Name	1043	string
+ATTRIBUTE	Current-Time		1044	string
+ATTRIBUTE	Realm			1045	string
+ATTRIBUTE	No-Such-Attribute	1046	string
+ATTRIBUTE	Packet-Type		1047	integer
+ATTRIBUTE	Proxy-To-Realm		1048	string
+ATTRIBUTE	Replicate-To-Realm	1049	string
+ATTRIBUTE	Acct-Session-Start-Time	1050	date
+ATTRIBUTE	Acct-Unique-Session-Id  1051	string
+ATTRIBUTE	Client-IP-Address	1052	ipaddr
+ATTRIBUTE	Ldap-UserDn		1053	string
+ATTRIBUTE	NS-MTA-MD5-Password	1054	string
+ATTRIBUTE	SQL-User-Name	 	1055	string
+ATTRIBUTE	LM-Password		1057	octets
+ATTRIBUTE	NT-Password		1058	octets
+ATTRIBUTE	SMB-Account-CTRL	1059	integer
+ATTRIBUTE	SMB-Account-CTRL-TEXT	1061	string
+ATTRIBUTE	User-Profile		1062	string
+ATTRIBUTE	Digest-Realm		1063	string
+ATTRIBUTE	Digest-Nonce		1064	string
+ATTRIBUTE	Digest-Method		1065	string
+ATTRIBUTE	Digest-URI		1066	string
+ATTRIBUTE	Digest-QOP		1067	string
+ATTRIBUTE	Digest-Algorithm	1068	string
+ATTRIBUTE	Digest-Body-Digest	1069	string
+ATTRIBUTE	Digest-CNonce		1070	string
+ATTRIBUTE	Digest-Nonce-Count	1071	string
+ATTRIBUTE	Digest-User-Name	1072	string
+ATTRIBUTE	Pool-Name		1073	string
+ATTRIBUTE	Ldap-Group		1074	string
+ATTRIBUTE	Module-Success-Message	1075	string
+ATTRIBUTE	Module-Failure-Message	1076	string
+#		X99-Fast		1077	integer
+
+#
+#	Non-Protocol Attributes
+#	These attributes are used internally by the server
+#
+ATTRIBUTE	Auth-Type		1000	integer
+ATTRIBUTE	Menu			1001	string
+ATTRIBUTE	Termination-Menu	1002	string
+ATTRIBUTE	Prefix			1003	string
+ATTRIBUTE	Suffix			1004	string
+ATTRIBUTE	Group			1005	string
+ATTRIBUTE	Crypt-Password		1006	string
+ATTRIBUTE	Connect-Rate		1007	integer
+ATTRIBUTE	Add-Prefix		1008	string
+ATTRIBUTE	Add-Suffix		1009	string
+ATTRIBUTE	Expiration		1010	date
+ATTRIBUTE	Autz-Type		1011	integer
+
+#
+#	Integer Translations
+#
+
+#	User Types
+
+VALUE		Service-Type		Login-User		1
+VALUE		Service-Type		Framed-User		2
+VALUE		Service-Type		Callback-Login-User	3
+VALUE		Service-Type		Callback-Framed-User	4
+VALUE		Service-Type		Outbound-User		5
+VALUE		Service-Type		Administrative-User	6
+VALUE		Service-Type		NAS-Prompt-User		7
+VALUE		Service-Type		Authenticate-Only	8
+VALUE		Service-Type		Callback-NAS-Prompt	9
+VALUE		Service-Type		Call-Check		10
+VALUE		Service-Type		Callback-Administrative	11
+
+#	Framed Protocols
+
+VALUE		Framed-Protocol		PPP			1
+VALUE		Framed-Protocol		SLIP			2
+VALUE		Framed-Protocol		ARAP			3
+VALUE		Framed-Protocol		Gandalf-SLML		4
+VALUE		Framed-Protocol		Xylogics-IPX-SLIP	5
+VALUE		Framed-Protocol		X.75-Synchronous	6
+
+#	Framed Routing Values
+
+VALUE		Framed-Routing		None			0
+VALUE		Framed-Routing		Broadcast		1
+VALUE		Framed-Routing		Listen			2
+VALUE		Framed-Routing		Broadcast-Listen	3
+
+#	Framed Compression Types
+
+VALUE		Framed-Compression	None			0
+VALUE		Framed-Compression	Van-Jacobson-TCP-IP	1
+VALUE		Framed-Compression	IPX-Header-Compression	2
+VALUE		Framed-Compression	Stac-LZS		3
+
+#	Login Services
+
+VALUE		Login-Service		Telnet			0
+VALUE		Login-Service		Rlogin			1
+VALUE		Login-Service		TCP-Clear		2
+VALUE		Login-Service		PortMaster		3
+VALUE		Login-Service		LAT			4
+VALUE		Login-Service		X25-PAD			5
+VALUE		Login-Service		X25-T3POS		6
+VALUE		Login-Service		TCP-Clear-Quiet		8
+
+#	Login-TCP-Port		(see /etc/services for more examples)
+
+VALUE		Login-TCP-Port		Telnet			23
+VALUE		Login-TCP-Port		Rlogin			513
+VALUE		Login-TCP-Port		Rsh			514
+
+#	Status Types
+
+VALUE		Acct-Status-Type	Start			1
+VALUE		Acct-Status-Type	Stop			2
+VALUE		Acct-Status-Type	Interim-Update		3
+VALUE		Acct-Status-Type	Alive			3
+VALUE		Acct-Status-Type	Accounting-On		7
+VALUE		Acct-Status-Type	Accounting-Off		8
+#	RFC 2867 Additional Status-Type Values
+VALUE		Acct-Status-Type	Tunnel-Start		9
+VALUE		Acct-Status-Type	Tunnel-Stop		10
+VALUE		Acct-Status-Type	Tunnel-Reject		11
+VALUE		Acct-Status-Type	Tunnel-Link-Start	12
+VALUE		Acct-Status-Type	Tunnel-Link-Stop	13
+VALUE		Acct-Status-Type	Tunnel-Link-Reject	14
+
+#	Authentication Types
+
+VALUE		Acct-Authentic		RADIUS			1
+VALUE		Acct-Authentic		Local			2
+
+#	Termination Options
+
+VALUE		Termination-Action	Default			0
+VALUE		Termination-Action	RADIUS-Request		1
+
+#	NAS Port Types
+
+VALUE		NAS-Port-Type		Async			0
+VALUE		NAS-Port-Type		Sync			1
+VALUE		NAS-Port-Type		ISDN			2
+VALUE		NAS-Port-Type		ISDN-V120		3
+VALUE		NAS-Port-Type		ISDN-V110		4
+VALUE		NAS-Port-Type		Virtual			5
+VALUE		NAS-Port-Type		PIAFS			6
+VALUE		NAS-Port-Type		HDLC-Clear-Channel	7
+VALUE		NAS-Port-Type		X.25			8
+VALUE		NAS-Port-Type		X.75			9
+VALUE		NAS-Port-Type		G.3-Fax			10
+VALUE		NAS-Port-Type		SDSL			11
+VALUE		NAS-Port-Type		ADSL-CAP		12
+VALUE		NAS-Port-Type		ADSL-DMT		13
+VALUE		NAS-Port-Type		IDSL			14
+VALUE		NAS-Port-Type		Ethernet		15
+VALUE		NAS-Port-Type		xDSL			16
+VALUE		NAS-Port-Type		Cable			17
+VALUE		NAS-Port-Type		Wireless-Other		18
+VALUE		NAS-Port-Type		Wireless-802.11		19
+
+#	Acct Terminate Causes, available in 3.3.2 and later
+
+VALUE           Acct-Terminate-Cause    User-Request            1
+VALUE           Acct-Terminate-Cause    Lost-Carrier            2
+VALUE           Acct-Terminate-Cause    Lost-Service            3
+VALUE           Acct-Terminate-Cause    Idle-Timeout            4
+VALUE           Acct-Terminate-Cause    Session-Timeout         5
+VALUE           Acct-Terminate-Cause    Admin-Reset             6
+VALUE           Acct-Terminate-Cause    Admin-Reboot            7
+VALUE           Acct-Terminate-Cause    Port-Error              8
+VALUE           Acct-Terminate-Cause    NAS-Error               9
+VALUE           Acct-Terminate-Cause    NAS-Request             10
+VALUE           Acct-Terminate-Cause    NAS-Reboot              11
+VALUE           Acct-Terminate-Cause    Port-Unneeded           12
+VALUE           Acct-Terminate-Cause    Port-Preempted          13
+VALUE           Acct-Terminate-Cause    Port-Suspended          14
+VALUE           Acct-Terminate-Cause    Service-Unavailable     15
+VALUE           Acct-Terminate-Cause    Callback                16
+VALUE           Acct-Terminate-Cause    User-Error              17
+VALUE           Acct-Terminate-Cause    Host-Request            18
+
+#VALUE		Tunnel-Type		L2TP			3
+#VALUE		Tunnel-Medium-Type	IP			1
+
+VALUE		Prompt			No-Echo			0
+VALUE		Prompt			Echo			1
+
+#
+#	Non-Protocol Integer Translations
+#
+
+VALUE		Auth-Type		Local			0
+VALUE		Auth-Type		System			1
+VALUE		Auth-Type		SecurID			2
+VALUE		Auth-Type		Crypt-Local		3
+VALUE		Auth-Type		Reject			4
+VALUE		Auth-Type		ActivCard		5
+VALUE		Auth-Type		EAP			6
+VALUE		Auth-Type		ARAP			7
+
+#
+#	Cistron extensions
+#
+VALUE		Auth-Type		Ldap			252
+VALUE		Auth-Type		Pam			253
+VALUE		Auth-Type		Accept			254
+
+VALUE		Auth-Type		PAP			1024
+VALUE		Auth-Type		CHAP			1025
+VALUE		Auth-Type		LDAP			1026
+VALUE		Auth-Type		PAM			1027
+VALUE		Auth-Type		MS-CHAP			1028
+VALUE		Auth-Type		Kerberos		1029
+VALUE		Auth-Type		CRAM			1030
+VALUE		Auth-Type		NS-MTA-MD5		1031
+VALUE		Auth-Type		CRAM			1032
+VALUE		Auth-Type		SMB			1033
+
+#
+#	Authorization type, too.
+#
+VALUE		Autz-Type		Local			0
+
+#
+#	Experimental Non-Protocol Integer Translations for Cistron-Radiusd
+#
+VALUE		Fall-Through		No			0
+VALUE		Fall-Through		Yes			1
+
+VALUE		Packet-Type	Access-Request			1
+VALUE		Packet-Type	Access-Accept			2
+VALUE		Packet-Type	Access-Reject			3
+VALUE		Packet-Type	Accounting-Request		4
+VALUE		Packet-Type	Accounting-Response		5
+VALUE		Packet-Type	Accounting-Status		6
+VALUE		Packet-Type	Password-Request		7
+VALUE		Packet-Type	Password-Accept			8
+VALUE		Packet-Type	Password-Reject			9
+VALUE		Packet-Type	Accounting-Message		10
+VALUE		Packet-Type	Access-Challenge		11
+VALUE		Packet-Type	Status-Server			12
+VALUE		Packet-Type	Status-Client			13
+
+#       Tunnel Type
+VALUE   Tunnel-Type                     PPTP                    1
+VALUE   Tunnel-Type                     L2F                     2
+VALUE   Tunnel-Type                     L2TP                    3
+VALUE   Tunnel-Type                     ATMP                    4
+VALUE   Tunnel-Type                     VTP                     5
+VALUE   Tunnel-Type                     AH                      6
+VALUE   Tunnel-Type                     IP                      7
+VALUE   Tunnel-Type                     MIN-IP                  8
+VALUE   Tunnel-Type                     ESP                     9
+VALUE   Tunnel-Type                     GRE                     10
+VALUE   Tunnel-Type                     DVS                     11
+VALUE   Tunnel-Type                     IP-in-IP                12
+
+#       Tunnel Medium Type
+VALUE   Tunnel-Medium-Type              IP                      1
+VALUE   Tunnel-Medium-Type              IPv4                    1
+VALUE   Tunnel-Medium-Type              IPv6                    2
+VALUE   Tunnel-Medium-Type              NSAP                    3
+VALUE   Tunnel-Medium-Type              HDLC                    4
+VALUE   Tunnel-Medium-Type              BBN-1822                5
+VALUE   Tunnel-Medium-Type              IEEE-802                6
+VALUE   Tunnel-Medium-Type              E.163                   7
+VALUE   Tunnel-Medium-Type              E.164                   8
+VALUE   Tunnel-Medium-Type              F.69                    9
+VALUE   Tunnel-Medium-Type              X.121                   10
+VALUE   Tunnel-Medium-Type              IPX                     11
+VALUE   Tunnel-Medium-Type              Appletalk               12
+VALUE   Tunnel-Medium-Type              DecNet-IV               13
+VALUE   Tunnel-Medium-Type              Banyan-Vines            14
+VALUE   Tunnel-Medium-Type              E.164-NSAP              15
diff --git a/source/lib/nagios/plugins/dictionary.freeradius b/source/lib/nagios/plugins/dictionary.freeradius
new file mode 100644
index 0000000..dc9fb22
--- /dev/null
+++ b/source/lib/nagios/plugins/dictionary.freeradius
@@ -0,0 +1,91 @@
+# -*- text -*-
+# Copyright (C) 2015 The FreeRADIUS Server project and contributors
+#
+#	The FreeRADIUS Vendor-Specific dictionary.
+#
+# Version:	$Id: ea468da88509aeff96b6f0d38ebc97411b9775b3 $
+#
+#	For a complete list of Private Enterprise Codes, see:
+#
+#	http://www.isi.edu/in-notes/iana/assignments/enterprise-numbers
+#
+
+VENDOR		FreeRADIUS			11344
+
+BEGIN-VENDOR	FreeRADIUS
+
+#
+#  This attribute is really a bitmask.
+#
+ATTRIBUTE	FreeRADIUS-Statistics-Type		127	integer
+
+VALUE	FreeRADIUS-Statistics-Type	None			0
+VALUE	FreeRADIUS-Statistics-Type	Authentication		1
+VALUE	FreeRADIUS-Statistics-Type	Accounting		2
+VALUE	FreeRADIUS-Statistics-Type	Proxy-Authentication	4
+VALUE	FreeRADIUS-Statistics-Type	Proxy-Accounting	8
+VALUE	FreeRADIUS-Statistics-Type	Internal		0x10
+VALUE	FreeRADIUS-Statistics-Type	Client			0x20
+VALUE	FreeRADIUS-Statistics-Type	Server			0x40
+VALUE	FreeRADIUS-Statistics-Type	Home-Server		0x80
+
+VALUE	FreeRADIUS-Statistics-Type	Auth-Acct		0x03
+VALUE	FreeRADIUS-Statistics-Type	Proxy-Auth-Acct		0x0c
+
+VALUE	FreeRADIUS-Statistics-Type	All			0x1f
+
+#
+#   FreeRADIUS statistic result attributes
+#
+ATTRIBUTE   FreeRADIUS-Total-Access-Requests   128 integer
+ATTRIBUTE   FreeRADIUS-Total-Access-Accepts   129 integer
+ATTRIBUTE   FreeRADIUS-Total-Access-Rejects   130 integer
+ATTRIBUTE   FreeRADIUS-Total-Access-Challenges   131 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Responses   132 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Duplicate-Requests   133 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Malformed-Requests   134 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Invalid-Requests   135 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Dropped-Requests   136 integer
+ATTRIBUTE   FreeRADIUS-Total-Auth-Unknown-Types   137 integer
+
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Access-Requests   138 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Access-Accepts   139 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Access-Rejects   140 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Access-Challenges   141 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Responses   142 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Duplicate-Requests   143 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Malformed-Requests   144 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Invalid-Requests   145 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Dropped-Requests   146 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Auth-Unknown-Types   147 integer
+
+ATTRIBUTE   FreeRADIUS-Total-Accounting-Requests   148 integer
+ATTRIBUTE   FreeRADIUS-Total-Accounting-Responses   149 integer
+ATTRIBUTE   FreeRADIUS-Total-Acct-Duplicate-Requests   150 integer
+ATTRIBUTE   FreeRADIUS-Total-Acct-Malformed-Requests   151 integer
+ATTRIBUTE   FreeRADIUS-Total-Acct-Invalid-Requests   152 integer
+ATTRIBUTE   FreeRADIUS-Total-Acct-Dropped-Requests   153 integer
+ATTRIBUTE   FreeRADIUS-Total-Acct-Unknown-Types   154 integer
+
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Accounting-Requests   155 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Accounting-Responses   156 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Acct-Duplicate-Requests   157 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Acct-Malformed-Requests   158 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Acct-Invalid-Requests   159 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Acct-Dropped-Requests   160 integer
+ATTRIBUTE   FreeRADIUS-Total-Proxy-Acct-Unknown-Types   161 integer
+
+ATTRIBUTE   FreeRADIUS-Queue-Len-Internal   162 integer
+ATTRIBUTE   FreeRADIUS-Queue-Len-Proxy   163 integer
+ATTRIBUTE   FreeRADIUS-Queue-Len-Auth   164 integer
+ATTRIBUTE   FreeRADIUS-Queue-Len-Acct   165 integer
+ATTRIBUTE   FreeRADIUS-Queue-Len-Detail   166 integer
+
+ATTRIBUTE   FreeRADIUS-Stats-Start-Time   176 date
+ATTRIBUTE   FreeRADIUS-Stats-HUP-Time   177 date
+
+ATTRIBUTE   FreeRADIUS-Queue-PPS-In   181 integer
+ATTRIBUTE   FreeRADIUS-Queue-PPS-In   182 integer
+
+
+END-VENDOR FreeRADIUS
\ No newline at end of file
diff --git a/source/packages/check_radius b/source/packages/check_radius
new file mode 100644
index 0000000..b14b394
--- /dev/null
+++ b/source/packages/check_radius
@@ -0,0 +1,15 @@
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'active RADIUS check\n',
+ 'download_url': 'https://thl-cmk.hopto.org',
+ 'files': {'checks': ['check_radius'],
+           'gui': ['metrics/check_radius.py',
+                   'wato/check_parameters/check_radius.py'],
+           'lib': ['nagios/plugins/check_radius',
+                   'nagios/plugins/dictionary',
+                   'nagios/plugins/dictionary.freeradius']},
+ 'name': 'check_radius',
+ 'title': 'Check RADIUS',
+ 'version': '0.0.1-20240421',
+ 'version.min_required': '2.2.0b1',
+ 'version.packaged': '2.2.0p24',
+ 'version.usable_until': None}
-- 
GitLab