--- /dev/null
+== Authentication Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:chap.adoc[chap] | Performs Challenge Handshake Authentication Protocol (CHAP) authentication, as described by RFC 2865.
+| xref:cram.adoc[cram] | Implements CRAM-MD5 authentication, a challenge response protocol similar to CHAP. CRAM is defined by RFC 2195.
+| xref:digest.adoc[digest] | The digest module performs HTTP digest authentication, usually for a SIP server. See draft-sterman-aaa-sip-00.txt for
+details. The module does not support RFC 5090.
+| xref:eap.adoc[eap] | Implements the base protocol for EAP (Extensible Authentication Protocol).
+| xref:krb5.adoc[krb5] | Implements kerberos authentication, using the result of decrypting the TGT as an indication that the provided
+password was correct.
+| xref:ldap.adoc[ldap] | Allows LDAP directory entries to be retrieved, modified, inserted and deleted.
+| xref:mschap.adoc[mschap] | Supports MS-CHAP and MS-CHAPv2 authentication. It also enforces the SMB-Account-Ctrl attribute.
+| xref:opendirectory.adoc[opendirectory] | Integrates with an Apple OpenDirectory service on the same host as FreeRADIUS to allow OpenDirectory users to
+authenticate.
+| xref:pam.adoc[pam] | Performs password checking via the Pluggable Authentication Module (PAM) framework.
+| xref:pap.adoc[pap] | Accepts a large number of formats for the "known good" (reference) password, such as crypt hashes, md5 hashes,
+and etc. The module takes the User-Password and performs the necessary transformations of the user submitted password
+to match the copy of the password the server has retrieved.
+| xref:securid.adoc[securid] | Supports authentication against an RSA SecurID ACE instance.
+| xref:sigtran.adoc[sigtran] | Supports authentication against a Sigtran interface.
+| xref:soh.adoc[soh] | Implements support for Microsoft's Statement of Health (SoH) protocol, which can run inside of PEAP or DHCP.
+| xref:wimax.adoc[wimax] | Implements WiMAX authentication over RADIUS.
+| xref:winbind.adoc[winbind] | The module also allows for direct connection to Samba winbindd (version 4.2.1 or above), which communicates with
+Active-Directory to retrieve group information and the user's NT-Password.
+| xref:yubikey.adoc[yubikey] | Supports authentication of yubikey tokens where the PSK is known to FreeRADIUS, and integrates with the Yubico
+cloud-based authentication service.
+|=====
+
+== Datastore Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:cache.adoc[cache] | Stores attributes and/or lists and adds them back to a subsequent request or to the current request on a later execution
+of the module.
+| xref:couchbase.adoc[couchbase] | Allows attributes to be stored and retrieved from a couchbase server. Client definitions may also be bulk loaded from a
+couchbase server as FreeRADIUS starts.
+| xref:csv.adoc[csv] | Maps values in a CSV file to FreeRADIUS attributes and adds them to the request.
+| xref:dict.adoc[dict] | Registers xlats and maps to access dictionary data
+| xref:dynamic_clients.adoc[dynamic_clients] | Reads client definitions from flat files.
+| xref:passwd.adoc[passwd] | Reads and caches line-oriented files that are in a format similar to ``/etc/passwd``.
+| xref:radutmp.adoc[radutmp] | Writes a utmp style file that lists the users who are logged in. The file is used mainly for Simultaneous-Use checking
+and by radwho to see who has current sessions.
+| xref:redis.adoc[redis] | Provides connectivity to single and clustered instances of Redis. This module exposes a string expansion that may be
+used to execute queries against Redis.
+| xref:redis_ippool.adoc[redis_ippool] | Implements a fast and scalable IP allocation system using Redis. Supports both IPv4 and IPv6 address and prefix
+allocation, and implements pre-allocation for use with DHCPv4.
+| xref:redis_who.adoc[redis_who] | Records which users are currently logged into the service. The file is used mainly for Simultaneous-Use checking to see
+who has current sessions.
+| xref:sql.adoc[sql] | Provides an abstraction over multiple SQL backends, via database specific drivers.
+| xref:sqlippool.adoc[sqlippool] | SQL based IP allocation module.
+| xref:unix.adoc[unix] | Retrieves a user's encrypted password from the local system and places it into the ``control:Crypt-Password`` attribute.
+The password is retrieved via the ``getpwent()`` and ``getspwent()`` system calls.
+|=====
+
+== IO Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:detail.adoc[detail] | Writes attributes from a request list to a flat file in 'detail' format.
+| xref:dhcpv4.adoc[dhcpv4] | Implements DHCPv4 (Dynamic Host Configuration Protocol for IPv4) client and relay.
+| xref:files.adoc[files] | Implements a traditional Livingston-style users file.
+| xref:linelog.adoc[linelog] | Creates log entries from attributes, string expansions, or static strings, and writes them to a variety of backends,
+including syslog, flat files, and raw UDP/TCP sockets.
+| xref:logtee.adoc[logtee] | Tee's request logging at runtime, sending it to additional log destinations.
+| xref:radius_client.adoc[radius_client] | Allows Access-Requests, Accounting-Requests, CoA-Requests and Disconnect-Messages to be sent during request processing.
+| xref:rest.adoc[rest] | Sends HTTP requests to remote servers and decodes the responses.
+| xref:unbound.adoc[unbound] | Performs queries against a DNS service to allow FQDNs to be resolved during request processing.
+|=====
+
+== Language Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:exec.adoc[exec] | Executes an external script, passing in FreeRADIUS attributes as environmental variables or as arguments.
+| xref:lua.adoc[lua] | Allows the server to call embedded lua scripts.
+| xref:mruby.adoc[mruby] | Allows the server to call a persistent, embedded mRuby script.
+| xref:perl.adoc[perl] | Allows the server to call a persistent, embedded Perl script.
+| xref:python.adoc[python] | Allows the server to call a persistent, embedded Python script.
+|=====
+
+== Miscellaneous Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:abfab_psk_sql.adoc[abfab_psk_sql] | ADFAB PSK
+| xref:cache_eap.adoc[cache_eap] | Cache EAP
+| xref:cache_tls.adoc[cache_tls] | Cache TLS Session
+| xref:cipher.adoc[cipher] | Cipher
+| xref:client.adoc[client] | Client
+| xref:cui.adoc[cui] | CUI
+| xref:detail.example.com.adoc[detail.example.com] | Detail (Sample)
+| xref:detail.log.adoc[detail.log] | Detail (Log Sample)
+| xref:dhcp_sqlippool.adoc[dhcp_sqlippool] | DHCP SQL-IP-Pool
+| xref:eap_inner.adoc[eap_inner] | EAP/Inner
+| xref:echo.adoc[echo] | Echo
+| xref:etc_group.adoc[etc_group] | etc_group
+| xref:isc_dhcp.adoc[isc_dhcp] | isc_dhcp
+| xref:mac2ip.adoc[mac2ip] | Mac2IP
+| xref:mac2vlan.adoc[mac2vlan] | Mac2Vlan
+| xref:ntlm_auth.adoc[ntlm_auth] | NTLM Auth
+| xref:radius.adoc[radius] | Radius
+| xref:rediswho.adoc[rediswho] | REDISWho
+| xref:smbpasswd.adoc[smbpasswd] | SMBPasswd
+| xref:sradutmp.adoc[sradutmp] | sRadutmp
+| xref:stats.adoc[stats] | Stats
+|=====
+
+== Policy Modules
+[options="header"]
+[cols="20%,80%"]
+|=====
+| Module | Description
+| xref:always.adoc[always] | Returns a pre-configured result code such as 'ok', 'noop', 'reject' etc...
+| xref:attr_filter.adoc[attr_filter] | Filters attributes in a request. Can delete attributes or permit them to have only certain values.
+| xref:date.adoc[date] | Converts date strings between user configurable formats.
+| xref:delay.adoc[delay] | Introduces an artificial non-blocking delay when processing a request.
+| xref:escape.adoc[escape] | Escapes and unescapes strings using the MIME escape format
+| xref:example.adoc[example] | An example module to use as a template when writing new modules.
+An example module to use as a template when writing new modules.
+| xref:expiration.adoc[expiration] | Determines whether a user account has expired, with the expiration time set by another module.
+| xref:expr.adoc[expr] | Registers a string expansion "%{expr:}" that allows basic arithmetic and binary operations.
+| xref:idn.adoc[idn] | Converts internationalized domain names to ASCII.
+| xref:json.adoc[json] | Parses JSON strings into an in memory format using the json-c library.
+| xref:logintime.adoc[logintime] | Enforces the time span during which a user may login to the system.
+| xref:sometimes.adoc[sometimes] | Is a hashing and distribution protocol, that will sometimes return one code or another depending on the input value
+configured.
+| xref:sqlcounter.adoc[sqlcounter] | Records statistics for users such as data transfer and session time, and prevent further logins when limits are reached.
+| xref:test.adoc[test] | Contains test stubs for CIT and the ``make test`` build target.
+| xref:unpack.adoc[unpack] | Unpacks binary data from octets type attributes into individual attributes.
+| xref:utf8.adoc[utf8] | Checks all attributes of type string in the current request, to ensure that they only contain valid UTF8 sequences.
+|=====
+
= Modules in Version 4
-As of Version 3, all of the modules have been places in the
-`mods-available/` directory. This practice follows that used by other
-servers such as Nginx, Apache, etc. The `modules` directory should not
-be used.
+The server includes a number of "plug-in" modules which perform a
+variety of actions. A full and annotated
+xref:mods-available/all_modules.adoc[module list] available on a
+separate page.
+
+Modules are divided up into a few categories:
+
+Authentication xref:mods-available/all_modules.adoc#_authentication_modules[list]::
+Modules which implement authentication protocols such as PAP, CHAP, MS-CHAP, EAP, etc.
+
+Datastore xref:mods-available/all_modules.adoc#_datastore_modules[list]::
+Modules which connect to external data stores such as SQL, LDAP, etc.
+
+IO xref:mods-available/all_modules.adoc#_io_modules[list]::
+Modules which write to disk, external log systems, etc.
+
+Language xref:mods-available/all_modules.adoc#_language_modules[list]::
+Modules which encapsulate a scripting language into the server such as
+Perl, Python, Lua, etc.
+
+Miscelleanous xref:mods-available/all_modules.adoc#_miscellaneous_modules[list]::
+Modules which do not belong elsewhere.
+
+Policy xref:mods-available/all_modules.adoc#_policy_modules[list]::
+Modules which implement policies to filter or enforce packets.
+
+
+== Enabling a Module
Modules are enabled by creating a file in the mods-enabled/ directory.
You can also create a soft-link from one directory to another:
}
```
-This says `require the LDAP module, but use the SQL module only if it
-is configured.`
+This configuration means that the server will _require the LDAP
+module, but use the SQL module only if it is configured._
This feature is not very useful for production configurations. It is,
-however, very useful for the default examples that ship with the server.
+however, very useful for the default examples that ship with the
+server.
== Ignoring module
If you see this message::
-```
+---
Ignoring module (see mods-available/README.adoc)
-```
+---
Then you are in the right place. Most of the time this message can be
ignored. The message can be fixed by find the references to `-module`
Once the module is enabled, it will automatically be used in the default
configuration.
-== List of available modules
-
-* <<abfab_psk_sql.adoc#,abfab_psk_sql>>
-* <<always.adoc#,always>>
-* <<attr_filter.adoc#,attr_filter>>
-* <<cache.adoc#,cache>>
-* <<cache_eap.adoc#,cache_eap>>
-* <<cache_tls.adoc#,cache_tls>>
-* <<chap.adoc#,chap>>
-* <<cipher.adoc#,cipher>>
-* <<client.adoc#,client>>
-* <<couchbase.adoc#,couchbase>>
-* <<csv.adoc#,csv>>
-* <<cui.adoc#,cui>>
-* <<date.adoc#,date>>
-* <<delay.adoc#,delay>>
-* <<detail.adoc#,detail>>
-* <<detail.example.com.adoc#,detail example com>>
-* <<detail.log.adoc#,detail log>>
-* <<dhcp_sqlippool.adoc#,dhcp_sqlippool>>
-* <<dhcpv4.adoc#,dhcpv4>>
-* <<digest.adoc#,digest>>
-* <<eap.adoc#,eap>>
-* <<eap_inner.adoc#,eap_inner>>
-* <<echo.adoc#,echo>>
-* <<escape.adoc#,escape>>
-* <<etc_group.adoc#,etc_group>>
-* <<exec.adoc#,exec>>
-* <<expiration.adoc#,expiration>>
-* <<expr.adoc#,expr>>
-* <<files.adoc#,files>>
-* <<idn.adoc#,idn>>
-* <<isc_dhcp.adoc#,isc_dhcp>>
-* <<json.adoc#,json>>
-* <<krb5.adoc#,krb5>>
-* <<ldap.adoc#,ldap>>
-* <<linelog.adoc#,linelog>>
-* <<logintime.adoc#,logintime>>
-* <<logtee.adoc#,logtee>>
-* <<lua.adoc#,lua>>
-* <<mac2ip.adoc#,mac2ip>>
-* <<mac2vlan.adoc#,mac2vlan>>
-* <<mruby.adoc#,mruby>>
-* <<mschap.adoc#,mschap>>
-* <<ntlm_auth.adoc#,ntlm_auth>>
-* <<opendirectory.adoc#,opendirectory>>
-* <<pam.adoc#,pam>>
-* <<pap.adoc#,pap>>
-* <<passwd.adoc#,passwd>>
-* <<perl.adoc#,perl>>
-* <<python.adoc#,python>>
-* <<radius.adoc#,radius>>
-* <<radutmp.adoc#,radutmp>>
-* <<redis.adoc#,redis>>
-* <<redis_ippool.adoc#,redis_ippool>>
-* <<rediswho.adoc#,rediswho>>
-* <<rest.adoc#,rest>>
-* <<smbpasswd.adoc#,smbpasswd>>
-* <<soh.adoc#,soh>>
-* <<sometimes.adoc#,sometimes>>
-* <<sql.adoc#,sql>>
-* <<sqlcounter.adoc#,sqlcounter>>
-* <<sqlippool.adoc#,sqlippool>>
-* <<sradutmp.adoc#,sradutmp>>
-* <<stats.adoc#,stats>>
-* <<unbound.adoc#,unbound>>
-* <<unix.adoc#,unix>>
-* <<unpack.adoc#,unpack>>
-* <<utf8.adoc#,utf8>>
-* <<wimax.adoc#,wimax>>
-* <<winbind.adoc#,winbind>>
-* <<yubikey.adoc#,yubikey>>