#  -*- text -*-
#
#
#  $Id: 0337e37e4d4fb0738ed416e67163ae6090cf882e $

#######################################################################
#
#  = Client Module
#
#  The `client` module loads RADIUS clients as needed, rather than when the server
#  starts.
#
#  This module is listed in the `new client { ... }` section of a virtual server to read
#  client definitions from FreeRADIUS config files transforming them into attributes.
#  These attributes are then used by the server to create internal client definitions.
#
#  This indirection is necessary as client definitions can be provided by many different
#  modules (`ldap`, `sql`, etc...), all of which emit client data in
#  attribute form.  Treating static configuration files specially would increase code
#  complexity.
#
#  There are no configuration entries for this module. Instead, it relies on the `client`
#  configuration.
#
#  You must:
#
#  1. Link `sites-enabled/dynamic-clients` to `sites-available/dynamic-clients`.
#
#  2. Define a client network/mask (see the top of `sites-enabled/dynamic-clients).
#
#  3. Uncomment the `directory` entry in that client definition.
#
#  4. List `client` in the `new client { .. }` section of the `client` virtual server.
#  The default example already does this.
#
#  5. Put files into the above directory, one per IP.  e.g. file `192.0.2.1` should contain
#  a normal client definition
#  for a client with IP address `192.0.2.1`.
#
#  NOTE: For more documentation, see the file `sites-available/dynamic-clients`
#

#
#  ## Client Configuration
#
#  In addition to loading `client` definitions in from flat files, the clients module can
#  also be used to access data from previously defined clients.
#

#
#  ### Attribute Mapping
#
#  Maps arbitrary fields from a client definition to attributes in the current request.
#
#  [source,unlang]
#  ---
#  map client [<ipaddr>] {      // <1>
#       Foo = 'nas_type'       // <2>
#       Bar := 'shortname'     // <3>
#       Baz += 'groups'        // <4>
#  }
#  ---
#
#  <1> By default `map client { ... }` will operate on the current client, but alternative
#      clients can by specified by `<ipaddr>`.
#  <2> Assigns the value of the `nas_type` field from the client definition to
#      `Foo` if the `Foo` attribute does not exist.
#  <3> Assigns the value of the `shortname` field from the client definition to
#      `Bar`.
#  <4> Creates multiple `Baz` attributes from a custom group field associated
#      with the client.

#
#  ### Access Expansion
#
#  [options="header,autowidth"]
#  |===
#  | Function                               | Description
#  | `%request.client(<field>)`             | Expands to the named _field_ in the current client definition.
#  | `%request.client(<field>, <ipaddr>)`   | Expands to the named _field_ in the client specified by _ipaddr_.
#  |===
#

#
#  ## Configuration Settings
#
#  This module takes no configuration.
#
client {
}
