New build path variable
[freeradius.git] / raddb / radiusd.conf.in
index 0a7bdff..265001e 100644 (file)
@@ -6,12 +6,40 @@
 ##     $Id$
 ##
 
-#      The location of other config files and
-#      logfiles are declared in this file
+######################################################################
+#
+#      Read "man radiusd" before editing this file.  See the section
+#      titled DEBUGGING.  It outlines a method where you can quickly
+#      obtain the configuration you want, without running into
+#      trouble.
+#
+#      Run the server in debugging mode, and READ the output.
+#
+#              $ radiusd -X
 #
-#      Also general configuration for modules can be done
-#      in this file, it is exported through the API to
-#      modules that ask for it.
+#      We cannot emphasize this point strongly enough.  The vast
+#      majority of problems can be solved by carefully reading the
+#      debugging output, which includes warnings about common issues,
+#      and suggestions for how they may be fixed.
+#
+#      There may be a lot of output, but look carefully for words like:
+#      "warning", "error", "reject", or "failure".  The messages there
+#      will usually be enough to guide you to a solution.
+#
+#      If you are going to ask a question on the mailing list, then
+#      explain what you are trying to do, and include the output from
+#      debugging mode (radiusd -X).  Failure to do so means that all
+#      of the responses to your question will be people telling you
+#      to "post the output of radiusd -X".
+
+######################################################################
+#
+#      The location of other config files and logfiles are declared
+#      in this file.
+#
+#      Also general configuration for modules can be done in this
+#      file, it is exported through the API to modules that ask for
+#      it.
 #
 #      See "man radiusd.conf" for documentation on the format of this
 #      file.  Note that the individual configuration items are NOT
@@ -32,22 +60,16 @@ logdir = @logdir@
 raddbdir = @raddbdir@
 radacctdir = @radacctdir@
 
+#
+#  name of the running server.  See also the "-n" command-line option.
+name = radiusd
+
 #  Location of config and logfiles.
 confdir = ${raddbdir}
-run_dir = ${localstatedir}/run/radiusd
+run_dir = ${localstatedir}/run/${name}
 
-#
-#  Destination for log messages.  This can be one of:
-#
-#      files - log to ${log_file}, as defined above.
-#      syslog - to syslog (see also the log{} section, below)
-#      stdout - standard output
-#      stderr - standard error.
-#
-#  The command-line option "-X" over-rides this option, and forces
-#  logging to go to stdout.
-#
-log_destination = files
+# Should likely be ${localstatedir}/lib/radiusd
+db_dir = ${raddbdir}
 
 #
 # libdir: Where to find the rlm_* modules.
@@ -92,8 +114,32 @@ libdir = @libdir@
 #
 #  e.g.:  kill -HUP `cat /var/run/radiusd/radiusd.pid`
 #
-pidfile = ${run_dir}/radiusd.pid
+pidfile = ${run_dir}/${name}.pid
 
+#  chroot: directory where the server does "chroot".
+#
+#  The chroot is done very early in the process of starting the server.
+#  After the chroot has been performed it switches to the "user" listed
+#  below (which MUST be specified).  If "group" is specified, it switchs
+#  to that group, too.  Any other groups listed for the specified "user"
+#  in "/etc/group" are also added as part of this process.
+#
+#  The current working directory (chdir / cd) is left *outside* of the
+#  chroot until all of the modules have been initialized.  This allows
+#  the "raddb" directory to be left outside of the chroot.  Once the
+#  modules have been initialized, it does a "chdir" to ${logdir}.  This
+#  means that it should be impossible to break out of the chroot.
+#
+#  If you are worried about security issues related to this use of chdir,
+#  then simply ensure that the "raddb" directory is inside of the chroot,
+#  end be sure to do "cd raddb" BEFORE starting the server.
+#
+#  If the server is statically linked, then the only files that have
+#  to exist in the chroot are ${run_dir} and ${logdir}.  If you do the
+#  "cd raddb" as discussed above, then the "raddb" directory has to be
+#  inside of the chroot directory, too.
+#
+#chroot = /path/to/chroot/directory
 
 # user/group: The name (or #number) of the user/group to run radiusd as.
 #
@@ -103,9 +149,7 @@ pidfile = ${run_dir}/radiusd.pid
 #
 #   We STRONGLY recommend that you run the server with as few permissions
 #   as possible.  That is, if you're not using shadow passwords, the
-#   user and group items below should be set to 'nobody'.
-#
-#    On SCO (ODT 3) use "user = nouser" and "group = nogroup".
+#   user and group items below should be set to radius'.
 #
 #  NOTE that some kernels refuse to setgid(group) when the value of
 #  (unsigned)group is above 60000; don't use group nobody on these systems!
@@ -116,8 +160,12 @@ pidfile = ${run_dir}/radiusd.pid
 #  that the debugging mode server is running as a user that can read the
 #  shadow info, and the user listed below can not.
 #
-#user = nobody
-#group = nobody
+#  The server will also try to use "initgroups" to read /etc/groups.
+#  It will join all groups where "user" is a member.  This can allow
+#  for some finer-grained access controls.
+#
+#user = radius
+#group = radius
 
 #  max_request_time: The maximum time (in seconds) to handle a request.
 #
@@ -190,6 +238,33 @@ max_requests = 1024
 #  on the command line.
 #
 listen {
+       #  Type of packets to listen for.
+       #  Allowed values are:
+       #       auth    listen for authentication packets
+       #       acct    listen for accounting packets
+       #       proxy   IP to use for sending proxied packets
+       #       detail  Read from the detail file.  For examples, see
+       #               raddb/sites-available/copy-acct-to-home-server
+       #       status  listen for Status-Server packets.  For examples,
+       #               see raddb/sites-available/status
+       #       coa     listen for CoA-Request and Disconnect-Request
+       #               packets.  For examples, see the file
+       #               raddb/sites-available/coa-server
+       #
+       type = auth
+
+       #  Note: "type = proxy" lets you control the source IP used for
+       #        proxying packets, with some limitations:
+       #
+       #    * A proxy listener CANNOT be used in a virtual server section.
+       #    * You should probably set "port = 0".
+       #    * Any "clients" configuration will be ignored.
+       #
+       #  See also proxy.conf, and the "src_ipaddr" configuration entry
+       #  in the sample "home_server" section.  When you specify the
+       #  source IP address for packets sent to a home server, the
+       #  proxy listeners are automatically created.
+
        #  IP address on which to listen.
        #  Allowed values are:
        #       dotted quad (1.2.3.4)
@@ -207,13 +282,6 @@ listen {
        #       0 means "use /etc/services for the proper port"
        port = 0
 
-       #  Type of packets to listen for.
-       #  Allowed values are:
-       #       auth    listen for authentication packets
-       #       acct    listen for accounting packets
-       #
-       type = auth
-
        #  Some systems support binding to an interface, in addition
        #  to the IP address.  This feature isn't strictly necessary,
        #  but for sites with many IP addresses on one interface,
@@ -295,22 +363,73 @@ extended_expressions      = @REGEX_EXTENDED@
 #
 log {
        #
-       #  Which syslog facility to use, if ${log_destination} == "syslog"
+       #  Destination for log messages.  This can be one of:
        #
-       #  The exact values permitted here are OS-dependent.  You probably
-       #  don't want to change this.
+       #       files - log to "file", as defined below.
+       #       syslog - to syslog (see also the "syslog_facility", below.
+       #       stdout - standard output
+       #       stderr - standard error.
        #
-       syslog_facility = daemon
+       #  The command-line option "-X" over-rides this option, and forces
+       #  logging to go to stdout.
+       #
+       destination = files
 
        #
        #  The logging messages for the server are appended to the
-       #  tail of this file.
+       #  tail of this file if destination == "files"
        #
        #  If the server is running in debugging mode, this file is
        #  NOT used.
        #
        file = ${logdir}/radius.log
 
+       #
+       #  If this configuration parameter is set, then log messages for
+       #  a *request* go to this file, rather than to radius.log.
+       #
+       #  i.e. This is a log file per request, once the server has accepted
+       #  the request as being from a valid client.  Messages that are
+       #  not associated with a request still go to radius.log.
+       #
+       #  Not all log messages in the server core have been updated to use
+       #  this new internal API.  As a result, some messages will still
+       #  go to radius.log.  Please submit patches to fix this behavior.
+       #
+       #  The file name is expanded dynamically.  You should ONLY user
+       #  server-side attributes for the filename (e.g. things you control).
+       #  Using this feature MAY also slow down the server substantially,
+       #  especially if you do thinks like SQL calls as part of the
+       #  expansion of the filename.
+       #
+       #  The name of the log file should use attributes that don't change
+       #  over the lifetime of a request, such as User-Name,
+       #  Virtual-Server or Packet-Src-IP-Address.  Otherwise, the log
+       #  messages will be distributed over multiple files.
+       #
+       #  Logging can be enabled for an individual request by a special
+       #  dynamic expansion macro:  %{debug: 1}, where the debug level
+       #  for this request is set to '1' (or 2, 3, etc.).  e.g.
+       #
+       #       ...
+       #       update control {
+       #              Tmp-String-0 = "%{debug:1}"
+       #       }
+       #       ...
+       #
+       #  The attribute that the value is assigned to is unimportant,
+       #  and should be a "throw-away" attribute with no side effects.
+       #
+       #requests = ${logdir}/radiusd-%{%{Virtual-Server}:-DEFAULT}-%Y%m%d.log
+
+       #
+       #  Which syslog facility to use, if ${destination} == "syslog"
+       #
+       #  The exact values permitted here are OS-dependent.  You probably
+       #  don't want to change this.
+       #
+       syslog_facility = daemon
+
        #  Log the full User-Name attribute, as it was found in the request.
        #
        # allowed values: {no, yes}
@@ -331,6 +450,18 @@ log {
        #
        auth_badpass = no
        auth_goodpass = no
+
+       #  Log additional text at the end of the "Login OK" messages.
+       #  for these to work, the "auth" and "auth_goopass" or "auth_badpass"
+       #  configurations above have to be set to "yes".
+       #
+       #  The strings below are dynamically expanded, which means that
+       #  you can put anything you want in them.  However, note that
+       #  this expansion can be slow, and can negatively impact server
+       #  performance.
+       #
+#      msg_goodpass = ""
+#      msg_badpass = ""
 }
 
 #  The program to execute to do concurrency checks.
@@ -389,6 +520,8 @@ security {
        #  packet.  If the server responds, it must be alive, and the
        #  NAS can start using it for real requests.
        #
+       #  See also raddb/sites-available/status
+       #
        status_server = yes
 }
 
@@ -428,18 +561,6 @@ $INCLUDE proxy.conf
 $INCLUDE clients.conf
 
 
-# SNMP CONFIGURATION
-#
-#  Snmp configuration is only valid if SNMP support was enabled
-#  at compile time.
-#
-#  To enable SNMP querying of the server, set the value of the
-#  'snmp' attribute to 'yes'
-#
-snmp   = no
-$INCLUDE snmp.conf
-
-
 # THREAD POOL CONFIGURATION
 #
 #  The thread pool is a long-lived group of threads which
@@ -537,898 +658,29 @@ modules {
        #
        #  The instance names can then be used in later configuration
        #  INSTEAD of the original 'name'.  See the 'radutmp' configuration
-       #  below for an example.
+       #  for an example.
        #
 
-       # PAP module to authenticate users based on their stored password
-       #
-       #  Supports multiple encryption/hash schemes.  See "man passwd"
-       #  for details.
-       #
-       #  The "auto_header" configuration item can be set to "yes".
-       #  In this case, the module will look inside of the User-Password
-       #  attribute for the headers {crypt}, {clear}, etc., and will
-       #  automatically create the attribute on the right-hand side,
-       #  with the correct value.  It will also automatically handle
-       #  Base-64 encoded data, hex strings, and binary data.
-       pap {
-               auto_header = no
-       }
-
-       # CHAP module
        #
-       #  To authenticate requests containing a CHAP-Password attribute.
+       #  As of 2.0.5, most of the module configurations are in a
+       #  sub-directory.  Files matching the regex /[a-zA-Z0-9_.]+/
+       #  are loaded.  The modules are initialized ONLY if they are
+       #  referenced in a processing section, such as authorize,
+       #  authenticate, accounting, pre/post-proxy, etc.
        #
-       chap {
-               authtype = CHAP
-       }
-
-       # Pluggable Authentication Modules
-       #
-       #  For Linux, see:
-       #       http://www.kernel.org/pub/linux/libs/pam/index.html
-       #
-       #  WARNING: On many systems, the system PAM libraries have
-       #           memory leaks!  We STRONGLY SUGGEST that you do not
-       #           use PAM for authentication, due to those memory leaks.
-       #
-       pam {
-               #
-               #  The name to use for PAM authentication.
-               #  PAM looks in /etc/pam.d/${pam_auth_name}
-               #  for it's configuration.  See 'redhat/radiusd-pam'
-               #  for a sample PAM configuration file.
-               #
-               #  Note that any Pam-Auth attribute set in the 'authorize'
-               #  section will over-ride this one.
-               #
-               pam_auth = radiusd
-       }
-
-       # Unix /etc/passwd style authentication
-       #
-       unix {
-               #  As of 1.1.0, the Unix module no longer reads,
-               #  or caches /etc/passwd, /etc/shadow, or /etc/group.
-               #  If you wish to cache those files, see the passwd
-               #  module, above.
-               #
-
-               #
-               #  The location of the "wtmp" file.
-               #  This should be moved to it's own module soon.
-               #
-               #  The only use for 'radlast'.  If you don't use
-               #  'radlast', then you can comment out this item.
-               #
-               radwtmp = ${logdir}/radwtmp
-       }
+       $INCLUDE ${confdir}/modules/
 
        #  Extensible Authentication Protocol
        #
        #  For all EAP related authentications.
        #  Now in another file, because it is very large.
        #
-$INCLUDE eap.conf
-
-       # Microsoft CHAP authentication
-       #
-       #  This module supports MS-CHAP and MS-CHAPv2 authentication.
-       #  It also enforces the SMB-Account-Ctrl attribute.
-       #
-       mschap {
-               #
-               #  As of 0.9, the mschap module does NOT support
-               #  reading from /etc/smbpasswd.
-               #
-               #  If you are using /etc/smbpasswd, see the 'passwd'
-               #  module for an example of how to use /etc/smbpasswd
-
-               # if use_mppe is not set to no mschap will
-               # add MS-CHAP-MPPE-Keys for MS-CHAPv1 and
-               # MS-MPPE-Recv-Key/MS-MPPE-Send-Key for MS-CHAPv2
-               #
-               #use_mppe = no
-
-               # if mppe is enabled require_encryption makes
-               # encryption moderate
-               #
-               #require_encryption = yes
-
-               # require_strong always requires 128 bit key
-               # encryption
-               #
-               #require_strong = yes
-
-               # Windows sends us a username in the form of
-               # DOMAIN\user, but sends the challenge response
-               # based on only the user portion.  This hack
-               # corrects for that incorrect behavior.
-               #
-               #with_ntdomain_hack = no
-
-               # The module can perform authentication itself, OR
-               # use a Windows Domain Controller.  This configuration
-               # directive tells the module to call the ntlm_auth
-               # program, which will do the authentication, and return
-               # the NT-Key.  Note that you MUST have "winbindd" and
-               # "nmbd" running on the local machine for ntlm_auth
-               # to work.  See the ntlm_auth program documentation
-               # for details.
-               #
-               # Be VERY careful when editing the following line!
-               #
-               # You can also try setting the user name as:
-               #
-               #       ... --username=%{mschap:User-Name} ...
-               #
-               # In that case, the mschap module will look at the User-Name
-               # attribute, and do prefix/suffix checks in order to obtain
-               # the "best" user name for the request.
-               #
-               #ntlm_auth = "/path/to/ntlm_auth --request-nt-key --username=%{Stripped-User-Name:-%{User-Name:-None}} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NT-Response:-00}"
-       }
-
-       # Lightweight Directory Access Protocol (LDAP)
-       #
-       #  This module definition allows you to use LDAP for
-       #  authorization and authentication.
-       #
-       #  See doc/rlm_ldap for description of configuration options 
-       #  and sample authorize{} and authenticate{} blocks 
-       #
-       #  However, LDAP can be used for authentication ONLY when the
-       #  Access-Request packet contains a clear-text User-Password
-       #  attribute.  LDAP authentication will NOT work for any other
-       #  authentication method.
-       #
-       #  This means that LDAP servers don't understand EAP.  If you
-       #  force "Auth-Type = LDAP", and then send the server a
-       #  request containing EAP authentication, then authentication
-       #  WILL NOT WORK.
-       #
-       #  The solution is to use the default configuration, which does
-       #  work.
-       #
-       #  Setting "Auth-Type = LDAP" is ALMOST ALWAYS WRONG.  We
-       #  really can't emphasize this enough.
-       #       
-       ldap {
-               #
-               #  Note that this needs to match the name in the LDAP
-               #  server certificate, if you're using ldaps.
-               server = "ldap.your.domain"
-               #identity = "cn=admin,o=My Org,c=UA"
-               #password = mypass
-               basedn = "o=My Org,c=UA"
-               filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"
-               #base_filter = "(objectclass=radiusprofile)"
-
-               #  How many connections to keep open to the LDAP server.
-               #  This saves time over opening a new LDAP socket for
-               #  every authentication request.
-               ldap_connections_number = 5
-
-               # seconds to wait for LDAP query to finish. default: 20
-               timeout = 4
-
-               #  seconds LDAP server has to process the query (server-side
-               #  time limit). default: 20
-               #
-               #  LDAP_OPT_TIMELIMIT is set to this value.
-               timelimit = 3
-
-               #
-               #  seconds to wait for response of the server. (network
-               #   failures) default: 10
-               #
-               #  LDAP_OPT_NETWORK_TIMEOUT is set to this value.
-               net_timeout = 1
-
-               #
-               #  This subsection configures the tls related items
-               #  that control how FreeRADIUS connects to an LDAP
-               #  server.  It contains all of the "tls_*" configuration
-               #  entries used in older versions of FreeRADIUS.  Those
-               #  configuration entries can still be used, but we recommend
-               #  using these.
-               #
-               tls {
-                       # Set this to 'yes' to use TLS encrypted connections
-                       # to the LDAP database by using the StartTLS extended
-                       # operation.
-                       #                       
-                       # The StartTLS operation is supposed to be
-                       # used with normal ldap connections instead of
-                       # using ldaps (port 689) connections
-                       start_tls = no
-
-                       # cacertfile    = /path/to/cacert.pem
-                       # cacertdir             = /path/to/ca/dir/
-                       # certfile              = /path/to/radius.crt
-                       # keyfile               = /path/to/radius.key
-                       # randfile              = /path/to/rnd
-
-                       #  Certificate Verification requirements.  Can be:
-                       #    "never" (don't even bother trying)
-                       #    "allow" (try, but don't fail if the cerificate
-                       #               can't be verified)
-                       #    "demand" (fail if the certificate doesn't verify.)
-                       #
-                       #       The default is "allow"
-                       # require_cert  = "demand"
-               }
-
-               # default_profile = "cn=radprofile,ou=dialup,o=My Org,c=UA"
-               # profile_attribute = "radiusProfileDn"
-               # access_attr = "dialupAccess"
-
-               # Mapping of RADIUS dictionary attributes to LDAP
-               # directory attributes.
-               dictionary_mapping = ${confdir}/ldap.attrmap
-
-               #  Set password_attribute = nspmPassword to get the
-               #  user's password from a Novell eDirectory
-               #  backend. This will work ONLY IF FreeRADIUS has been
-               #  built with the --with-edir configure option.
-               #
-               # password_attribute = userPassword
-
-               #  Un-comment the following to disable Novell
-               #  eDirectory account policy check and intruder
-               #  detection. This will work *only if* FreeRADIUS is
-               #  configured to build with --with-edir option.
-               #
-               edir_account_policy_check = no
-
-               #
-               #  Group membership checking.  Disabled by default.
-               #
-               # groupname_attribute = cn
-               # groupmembership_filter = "(|(&(objectClass=GroupOfNames)(member=%{Ldap-UserDn}))(&(objectClass=GroupOfUniqueNames)(uniquemember=%{Ldap-UserDn})))"
-               # groupmembership_attribute = radiusGroupName
-
-               # compare_check_items = yes
-               # do_xlat = yes
-               # access_attr_used_for_allow = yes
-
-               #
-               #  By default, if the packet contains a User-Password,
-               #  and no other module is configured to handle the
-               #  authentication, the LDAP module sets itself to do
-               #  LDAP bind for authentication.
-               #
-               #  THIS WILL ONLY WORK FOR PAP AUTHENTICATION.
-               #
-               #  THIS WILL NOT WORK FOR CHAP, MS-CHAP, or 802.1x (EAP). 
-               #
-               #  You can disable this behavior by setting the following
-               #  configuration entry to "no".
-               #
-               #  allowed values: {no, yes}
-               # set_auth_type = yes
-
-               #  ldap_debug: debug flag for LDAP SDK
-               #  (see OpenLDAP documentation).  Set this to enable
-               #  huge amounts of LDAP debugging on the screen.
-               #  You should only use this if you are an LDAP expert.
-               #
-               #       default: 0x0000 (no debugging messages)
-               #       Example:(LDAP_DEBUG_FILTER+LDAP_DEBUG_CONNS)
-               #ldap_debug = 0x0028 
-       }
-
-       # passwd module allows to do authorization via any passwd-like
-       # file and to extract any attributes from these modules
-       #
-       # parameters are:
-       #   filename - path to filename
-       #   format - format for filename record. This parameters
-       #            correlates record in the passwd file and RADIUS
-       #            attributes.
-       #
-       #            Field marked as '*' is key field. That is, the parameter
-       #            with this name from the request is used to search for
-       #            the record from passwd file
-       #            Attribute marked as '=' is added to reply_itmes instead
-       #            of default configure_itmes
-       #            Attribute marked as '~' is added to request_items
-       #
-       #            Field marked as ',' may contain a comma separated list
-       #            of attributes.
-       #   hashsize - hashtable size. If 0 or not specified records are not
-       #            stored in memory and file is red on every request.
-       #   allowmultiplekeys - if few records for every key are allowed
-       #   ignorenislike - ignore NIS-related records
-       #   delimiter - symbol to use as a field separator in passwd file,
-       #            for format ':' symbol is always used. '\0', '\n' are
-        #           not allowed 
-       #
-
-       #  An example configuration for using /etc/smbpasswd.
-       #
-       #passwd etc_smbpasswd {
-       #       filename = /etc/smbpasswd
-       #       format = "*User-Name::LM-Password:NT-Password:SMB-Account-CTRL-TEXT::"
-       #       hashsize = 100
-       #       ignorenislike = no
-       #       allowmultiplekeys = no
-       #}
-
-       #  Similar configuration, for the /etc/group file. Adds a Group-Name
-       #  attribute for every group that the user is member of.
-       #
-       #passwd etc_group {
-       #       filename = /etc/group
-       #       format = "=Group-Name:::*,User-Name"
-       #       hashsize = 50
-       #       ignorenislike = yes
-       #       allowmultiplekeys = yes
-       #       delimiter = ":"
-       #}
-
-       # Realm module, for proxying.
-       #
-       #  You can have multiple instances of the realm module to
-       #  support multiple realm syntaxs at the same time.  The
-       #  search order is defined by the order in the authorize and
-       #  preacct sections.
-       #
-       #  Four config options:
-       #       format         -  must be "prefix" or "suffix"
-       #                         The special cases of "DEFAULT"
-       #                         and "NULL" are allowed, too.
-       #       delimiter      -  must be a single character
-
-       #  'realm/username'
-       #
-       #  Using this entry, IPASS users have their realm set to "IPASS".
-       realm IPASS {
-               format = prefix
-               delimiter = "/"
-       }
-
-       #  'username@realm'
-       #
-       realm suffix {
-               format = suffix
-               delimiter = "@"
-       }
-
-       #  'username%realm'
-       #
-       realm realmpercent {
-               format = suffix
-               delimiter = "%"
-       }
-
-       #
-       #  'domain\user'
-       #
-       realm ntdomain {
-               format = prefix
-               delimiter = "\\"
-       }       
-
-       #  A simple value checking module
-       #
-       #  It can be used to check if an attribute value in the request
-       #  matches a (possibly multi valued) attribute in the check
-       #  items This can be used for example for caller-id
-       #  authentication.  For the module to run, both the request
-       #  attribute and the check items attribute must exist
-       #
-       #  i.e.
-       #  A user has an ldap entry with 2 radiusCallingStationId
-       #  attributes with values "12345678" and "12345679".  If we
-       #  enable rlm_checkval, then any request which contains a
-       #  Calling-Station-Id with one of those two values will be
-       #  accepted.  Requests with other values for
-       #  Calling-Station-Id will be rejected.
-       #
-       #  Regular expressions in the check attribute value are allowed
-       #  as long as the operator is '=~'
-       #
-       checkval {
-               # The attribute to look for in the request
-               item-name = Calling-Station-Id
-
-               # The attribute to look for in check items. Can be multi valued
-               check-name = Calling-Station-Id
-
-               # The data type. Can be
-               # string,integer,ipaddr,date,abinary,octets
-               data-type = string
-
-               # If set to yes and we dont find the item-name attribute in the
-               # request then we send back a reject
-               # DEFAULT is no
-               #notfound-reject = no
-       }
-       
-       #  rewrite arbitrary packets.  Useful in accounting and authorization.
-       #
-       #
-       #  The module can also use the Rewrite-Rule attribute. If it
-       #  is set and matches the name of the module instance, then
-       #  that module instance will be the only one which runs.
-       #
-       #  Also if new_attribute is set to yes then a new attribute
-       #  will be created containing the value replacewith and it
-       #  will be added to searchin (packet, reply, proxy,
-       #  proxy_reply or config).
-       #
-       # searchfor,ignore_case and max_matches will be ignored in that case.
-       #
-       # Backreferences are supported.
-       #       %{0} will contain the string the whole match
-       #       %{1} to %{8} will contain the contents of the 1st to
-       #       the 8th parentheses
-       #
-       # If max_matches is greater than one, the backreferences will
-       # correspond to the first attributed that matched.
-
-       #
-       #attr_rewrite sanecallerid {
-       #       attribute = Called-Station-Id
-               # may be "packet", "reply", "proxy", "proxy_reply" or "config"
-       #       searchin = packet
-       #       searchfor = "[+ ]"
-       #       replacewith = ""
-       #       ignore_case = no
-       #       new_attribute = no
-       #       max_matches = 10
-       #
-       #       ## If set to yes then the replace string will be
-       #       ## appended to the original string
-       #       append = no
-       #}
-
-       # Preprocess the incoming RADIUS request, before handing it off
-       # to other modules.
-       #
-       #  This module processes the 'huntgroups' and 'hints' files.
-       #  In addition, it re-writes some weird attributes created
-       #  by some NASes, and converts the attributes into a form which
-       #  is a little more standard.
-       #
-       preprocess {
-               huntgroups = ${confdir}/huntgroups
-               hints = ${confdir}/hints
-
-               # This hack changes Ascend's wierd port numberings
-               # to standard 0-??? port numbers so that the "+" works
-               # for IP address assignments.
-               with_ascend_hack = no
-               ascend_channels_per_line = 23
-
-               # Windows NT machines often authenticate themselves as
-               # NT_DOMAIN\username
-               #
-               # If this is set to 'yes', then the NT_DOMAIN portion
-               # of the user-name is silently discarded.
-               #
-               # This configuration entry SHOULD NOT be used.
-               # See the "realms" module for a better way to handle
-               # NT domains.
-               with_ntdomain_hack = no
-
-               # Specialix Jetstream 8500 24 port access server.
-               #
-               # If the user name is 10 characters or longer, a "/"
-               # and the excess characters after the 10th are
-               # appended to the user name.
-               #
-               # If you're not running that NAS, you don't need
-               # this hack.
-               with_specialix_jetstream_hack = no
-
-               # Cisco (and Quintum in Cisco mode) sends it's VSA attributes
-               # with the attribute name *again* in the string, like:
-               #
-               #   H323-Attribute = "h323-attribute=value".
-               #
-               # If this configuration item is set to 'yes', then
-               # the redundant data in the the attribute text is stripped
-               # out.  The result is:
-               #
-               #  H323-Attribute = "value"
-               #
-               # If you're not running a Cisco or Quintum NAS, you don't
-               # need this hack.
-               with_cisco_vsa_hack = no
-       }
-
-       # Livingston-style 'users' file
-       #
-       files {
-               # The default key attribute to use for matches.  The content
-               # of this attribute is used to match the "name" of the
-               # entry.
-               #key = "%{Stripped-User-Name:-%{User-Name}}"
-
-               usersfile = ${confdir}/users
-               acctusersfile = ${confdir}/acct_users
-               preproxy_usersfile = ${confdir}/preproxy_users
-
-               #  If you want to use the old Cistron 'users' file
-               #  with FreeRADIUS, you should change the next line
-               #  to 'compat = cistron'.  You can the copy your 'users'
-               #  file from Cistron.
-               compat = no
-       }
-
-       # Write a detailed log of all accounting records received.
-       #
-       detail {
-               #  Note that we do NOT use NAS-IP-Address here, as
-               #  that attribute MAY BE from the originating NAS, and
-               #  NOT from the proxy which actually sent us the
-               #  request.  The Client-IP-Address attribute is ALWAYS
-               #  the address of the client which sent us the
-               #  request.
-               #
-               #  The following line creates a new detail file for
-               #  every radius client (by IP address or hostname).
-               #  In addition, a new detail file is created every
-               #  day, so that the detail file doesn't have to go
-               #  through a 'log rotation'
-               #
-               #  If your detail files are large, you may also want
-               #  to add a ':%H' (see doc/variables.txt) to the end
-               #  of it, to create a new detail file every hour, e.g.:
-               #
-               #   ..../detail-%Y%m%d:%H
-               #
-               #  This will create a new detail file for every hour.
-               #
-               detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
-
-               #
-               #  The Unix-style permissions on the 'detail' file.
-               #
-               #  The detail file often contains secret or private
-               #  information about users.  So by keeping the file
-               #  permissions restrictive, we can prevent unwanted
-               #  people from seeing that information.
-               detailperm = 0600
-
-               #
-               #  Every entry in the detail file has a header which
-               #  is a timestamp.  By default, we use the ctime
-               #  format (see "man ctime" for details).
-               #
-               #  The header can be customized by editing this
-               #  string.  See "doc/variables.txt" for a description
-               #  of what can be put here.
-               #
-               header = "%t"
-
-               #
-               # Certain attributes such as User-Password may be
-               # "sensitive", so they should not be printed in the
-               # detail file.  This section lists the attributes
-               # that should be suppressed.
-               #
-               # The attributes should be listed one to a line.
-               #
-               #suppress {
-                       # User-Password
-               #}
-
-       }
-
-       #
-       #  Many people want to log authentication requests.
-       #  Rather than modifying the server core to print out more
-       #  messages, we can use a different instance of the 'detail'
-       #  module, to log the authentication requests to a file.
-       #
-       #  You will also need to un-comment the 'auth_log' line
-       #  in the 'authorize' section, below.
-       #
-       # detail auth_log {
-               # detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
-
-               #
-               #  This MUST be 0600, otherwise anyone can read
-               #  the users passwords!
-               # detailperm = 0600
-
-               # You may also strip out passwords completely
-               #suppress {
-                       # User-Password
-               #}
-       # }
-
-       #
-       #  This module logs authentication reply packets sent
-       #  to a NAS.  Both Access-Accept and Access-Reject packets
-       #  are logged.
-       #
-       #  You will also need to un-comment the 'reply_log' line
-       #  in the 'post-auth' section, below.
-       #
-       # detail reply_log {
-               # detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
-
-               # detailperm = 0600
-       # }
-
-       #
-       #  This module logs packets proxied to a home server.
-       #
-       #  You will also need to un-comment the 'pre_proxy_log' line
-       #  in the 'pre-proxy' section, below.
-       #
-       # detail pre_proxy_log {
-               # detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m%d
-
-               #
-               #  This MUST be 0600, otherwise anyone can read
-               #  the users passwords!
-               # detailperm = 0600
-
-               # You may also strip out passwords completely
-               #suppress {
-                       # User-Password
-               #}
-       # }
-
-       #
-       #  This module logs response packets from a home server.
-       #
-       #  You will also need to un-comment the 'post_proxy_log' line
-       #  in the 'post-proxy' section, below.
-       #
-       # detail post_proxy_log {
-               # detailfile = ${radacctdir}/%{Client-IP-Address}/post-proxy-detail-%Y%m%d
-
-               # detailperm = 0600
-       # }
-
-       #
-       #  The rlm_sql_log module appends the SQL queries in a log
-       #  file which is read later by the radsqlrelay program.
-       #
-       #  This module only performs the dynamic expansion of the
-       #  variables found in the SQL statements. No operation is
-       #  executed on the database server. (this could be done
-       #  later by an external program) That means the module is
-       #  useful only with non-"SELECT" statements.
-       #
-       #  See rlm_sql_log(5) manpage.
-       #
-#      sql_log {
-#              path = "${radacctdir}/sql-relay"
-#              acct_table = "radacct"
-#              postauth_table = "radpostauth"
-#              sql_user_name = "%{%{User-Name}:-DEFAULT}"
-#
-#              Start = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
-#               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
-#               AcctSessionTime, AcctTerminateCause) VALUES                 \
-#               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
-#               '%{Framed-IP-Address}', '%S', '0', '0', '');"
-#              Stop = "INSERT INTO ${acct_table} (AcctSessionId, UserName,  \
-#               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
-#               AcctSessionTime, AcctTerminateCause) VALUES                 \
-#               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
-#               '%{Framed-IP-Address}', '0', '%S', '%{Acct-Session-Time}',  \
-#               '%{Acct-Terminate-Cause}');"
-#              Alive = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
-#               NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
-#               AcctSessionTime, AcctTerminateCause) VALUES                 \
-#               ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
-#               '%{Framed-IP-Address}', '0', '0', '%{Acct-Session-Time}','');"
-#
-#              Post-Auth = "INSERT INTO ${postauth_table}                   \
-#               (username, pass, reply, authdate) VALUES                            \
-#               ('%{User-Name}', '%{User-Password:-Chap-Password}',         \
-#               '%{reply:Packet-Type}', '%S');"
-#      }
-
-       #
-       #  Create a unique accounting session Id.  Many NASes re-use
-       #  or repeat values for Acct-Session-Id, causing no end of
-       #  confusion.
-       #
-       #  This module will add a (probably) unique session id 
-       #  to an accounting packet based on the attributes listed
-       #  below found in the packet.  See doc/rlm_acct_unique for
-       #  more information.
-       #
-       acct_unique {
-               key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
-       }
-
+       $INCLUDE eap.conf
 
        #  Include another file that has the SQL-related configuration.
        #  This is another file only because it tends to be big.
        #
-       $INCLUDE sql.conf
-
-
-       #  For Cisco VoIP specific accounting with Postgresql,
-       #  use:         ${confdir}/sql/postgresql/voip-postpaid.conf
-       #
-       #  You will also need the sql schema from:
-       #        src/billing/cisco_h323_db_schema-postgres.sql
-       #  Note: This config can be use AS WELL AS the standard sql
-       #  config if you need SQL based Auth
-       
-
-       #  Write a 'utmp' style file, of which users are currently
-       #  logged in, and where they've logged in from.
-       #
-       #  This file is used mainly for Simultaneous-Use checking,
-       #  and also 'radwho', to see who's currently logged in.
-       #
-       radutmp {
-               #  Where the file is stored.  It's not a log file,
-               #  so it doesn't need rotating.
-               #
-               filename = ${logdir}/radutmp
-
-               #  The field in the packet to key on for the
-               #  'user' name,  If you have other fields which you want
-               #  to use to key on to control Simultaneous-Use,
-               #  then you can use them here.
-               #
-               #  Note, however, that the size of the field in the
-               #  'utmp' data structure is small, around 32
-               #  characters, so that will limit the possible choices
-               #  of keys.
-               #
-               #  You may want instead: %{Stripped-User-Name:-%{User-Name}}
-               username = %{User-Name}
-
-
-               #  Whether or not we want to treat "user" the same
-               #  as "USER", or "User".  Some systems have problems
-               #  with case sensitivity, so this should be set to
-               #  'no' to enable the comparisons of the key attribute
-               #  to be case insensitive.
-               #
-               case_sensitive = yes
-
-               #  Accounting information may be lost, so the user MAY
-               #  have logged off of the NAS, but we haven't noticed.
-               #  If so, we can verify this information with the NAS,
-               #
-               #  If we want to believe the 'utmp' file, then this
-               #  configuration entry can be set to 'no'.
-               #
-               check_with_nas = yes            
-
-               # Set the file permissions, as the contents of this file
-               # are usually private.
-               perm = 0600
-
-               callerid = "yes"
-       }
-
-       # "Safe" radutmp - does not contain caller ID, so it can be
-       # world-readable, and radwho can work for normal users, without
-       # exposing any information that isn't already exposed by who(1).
-       #
-       # This is another 'instance' of the radutmp module, but it is given
-       # then name "sradutmp" to identify it later in the "accounting"
-       # section.
-       radutmp sradutmp {
-               filename = ${logdir}/sradutmp
-               perm = 0644
-               callerid = "no"
-       }
-
-       # attr_filter - filters the attributes received in replies from
-       # proxied servers, to make sure we send back to our RADIUS client
-       # only allowed attributes.
-       attr_filter attr_filter.post-proxy {
-               attrsfile = ${confdir}/attrs
-       }
-
-       # attr_filter - filters the attributes in the packets we send to
-       # the RADIUS home servers.
-       attr_filter attr_filter.pre-proxy {
-               attrsfile = ${confdir}/attrs.pre-proxy
-       }
-
-       # Enforce RFC requirements on the contents of Access-Reject
-       # packets.  See the comments at the top of the file for
-       # more details.
-       #
-       attr_filter attr_filter.access_reject {
-               key = %{User-Name}
-               attrsfile = ${confdir}/attrs.access_reject
-       }
-
-       #  Enforce RFC requirements on the contents of the
-       #  Accounting-Response packets.  See the comments at the
-       #  top of the file for more details.
-       #
-       attr_filter attr_filter.accounting_response {
-               key = %{User-Name}
-               attrsfile = ${confdir}/attrs.accounting_response
-       }
-
-       #  counter module:
-       #  This module takes an attribute (count-attribute).
-       #  It also takes a key, and creates a counter for each unique
-       #  key.  The count is incremented when accounting packets are
-       #  received by the server.  The value of the increment depends
-       #  on the attribute type.
-       #  If the attribute is Acct-Session-Time or of an integer type we add
-       #  the value of the attribute. If it is anything else we increase the
-       #  counter by one.
-       #
-       #  The 'reset' parameter defines when the counters are all reset to
-       #  zero.  It can be hourly, daily, weekly, monthly or never.
-       #
-       #  hourly: Reset on 00:00 of every hour
-       #  daily: Reset on 00:00:00 every day
-       #  weekly: Reset on 00:00:00 on sunday
-       #  monthly: Reset on 00:00:00 of the first day of each month
-       #
-       #  It can also be user defined. It should be of the form:
-       #  num[hdwm] where:
-       #  h: hours, d: days, w: weeks, m: months
-       #  If the letter is ommited days will be assumed. In example:
-       #  reset = 10h (reset every 10 hours)
-       #  reset = 12  (reset every 12 days)
-       #
-       #
-       #  The check-name attribute defines an attribute which will be
-       #  registered by the counter module and can be used to set the
-       #  maximum allowed value for the counter after which the user
-       #  is rejected.
-       #  Something like:
-       #
-       #  DEFAULT Max-Daily-Session := 36000
-       #          Fall-Through = 1
-       #
-       #  You should add the counter module in the instantiate
-       #  section so that it registers check-name before the files
-       #  module reads the users file.
-       #
-       #  If check-name is set and the user is to be rejected then we
-       #  send back a Reply-Message and we log a Failure-Message in
-       #  the radius.log
-       #
-       #  If the count attribute is Acct-Session-Time then on each
-       #  login we send back the remaining online time as a
-       #  Session-Timeout attribute ELSE and if the reply-name is
-       #  set, we send back that attribute.  The reply-name attribute
-       #  MUST be of an integer type.
-       #
-       #  The counter-name can also be used instead of using the check-name
-       #  like below:
-       #
-       #  DEFAULT  Daily-Session-Time > 3600, Auth-Type = Reject
-       #      Reply-Message = "You've used up more than one hour today"
-       #
-       #  The allowed-servicetype attribute can be used to only take
-       #  into account specific sessions. For example if a user first
-       #  logs in through a login menu and then selects ppp there will
-       #  be two sessions. One for Login-User and one for Framed-User
-       #  service type. We only need to take into account the second one.
-       #
-       #  The module should be added in the instantiate, authorize and
-       #  accounting sections.  Make sure that in the authorize
-       #  section it comes after any module which sets the
-       #  'check-name' attribute.
-       #
-       counter daily {
-               filename = ${confdir}/db.daily
-               key = User-Name
-               count-attribute = Acct-Session-Time
-               reset = daily
-               counter-name = Daily-Session-Time
-               check-name = Max-Daily-Session
-               reply-name = Session-Timeout
-               allowed-servicetype = Framed-User
-               cache-size = 5000
-       }
+#      $INCLUDE sql.conf
 
        #
        #  This module is an SQL enabled version of the counter module.
@@ -1440,322 +692,12 @@ $INCLUDE eap.conf
        #  totally dependent on the SQL module to process Accounting
        #  packets.
        #
-       $INCLUDE sql/mysql/counter.conf
-       #$INCLUDE sql/postgresql/counter.conf
-
-       #
-       # The "always" module is here for debugging purposes. Each
-       # instance simply returns the same result, always, without
-       # doing anything.
-       always fail {
-               rcode = fail
-       }
-       always reject {
-               rcode = reject
-       }
-       always noop {
-               rcode = noop
-       }
-       always handled {
-               rcode = handled
-       }
-       always updated {
-               rcode = updated
-       }
-       always notfound {
-               rcode = notfound
-       }
-       always ok {
-               rcode = ok
-               simulcount = 0
-               mpp = no
-       }
-
-       #
-       #  The 'expression' module currently has no configuration.
-       #
-       #  This module is useful only for 'xlat'.  To use it,
-       #  put 'exec' into the 'instantiate' section.  You can then
-       #  do dynamic translation of attributes like:
-       #
-       #  Attribute-Name = `%{expr:2 + 3 + %{exec: uid -u}}`
-       #
-       #  The value of the attribute will be replaced with the output
-       #  of the program which is executed.  Due to RADIUS protocol
-       #  limitations, any output over 253 bytes will be ignored.
-       #
-       #  The module also registers a few paircompare functions
-       expr {
-       }
+#      $INCLUDE sql/mysql/counter.conf
 
        #
-       #  The 'digest' module currently has no configuration.
-       #
-       #  "Digest" authentication against a Cisco SIP server.
-       #  See 'doc/rfc/draft-sterman-aaa-sip-00.txt' for details
-       #  on performing digest authentication for Cisco SIP servers.
-       #
-       digest {
-       }
-
+       #  IP addresses managed in an SQL table.
        #
-       # The expiration module. This handles the Expiration attribute
-       # It should be included in the *end* of the authorize section
-       # in order to handle user Expiration. It should also be included
-       # in the instantiate section in order to register the Expiration
-       # compare function
-       #
-       expiration {
-               #
-               # The Reply-Message which will be sent back in case the
-               # account has expired. Dynamic substitution is supported
-               #
-               reply-message = "Password Has Expired\r\n" 
-#              reply-message = "Your account has expired, %{User-Name}\r\n"
-       }
-
-       # The logintime module. This handles the Login-Time,
-       # Current-Time, and Time-Of-Day attributes.  It should be
-       # included in the *end* of the authorize section in order to
-       # handle Login-Time checks. It should also be included in the
-       # instantiate section in order to register the Current-Time
-       # and Time-Of-Day comparison functions.
-       #
-       # When the Login-Time attribute is set to some value, and the
-       # user has bene permitted to log in, a Session-Timeout is
-       # calculated based on the remaining time.  See "doc/README".
-       #
-       logintime {
-               #
-               # The Reply-Message which will be sent back in case
-               # the account is calling outside of the allowed
-               # timespan. Dynamic substitution is supported.
-               #
-               reply-message = "You are calling outside your allowed timespan\r\n"
-#              reply-message = "Outside allowed timespan (%{control:Login-Time}), %{User-Name}\r\n"
-
-               # The minimum timeout (in seconds) a user is allowed
-               # to have. If the calculated timeout is lower we don't
-               # allow the logon. Some NASes do not handle values
-               # lower than 60 seconds well.
-               minimum-timeout = 60
-       }
-       #
-       #  Execute external programs
-       #
-       #  This module is useful only for 'xlat'.  To use it,
-       #  put 'exec' into the 'instantiate' section.  You can then
-       #  do dynamic translation of attributes like:
-       #
-       #  Attribute-Name = `%{exec:/path/to/program args}`
-       #
-       #  The value of the attribute will be replaced with the output
-       #  of the program which is executed.  Due to RADIUS protocol
-       #  limitations, any output over 253 bytes will be ignored.
-       #
-       #  The RADIUS attributes from the user request will be placed
-       #  into environment variables of the executed program, as
-       #  described in 'doc/variables.txt'
-       #
-       exec {
-               wait = yes
-               input_pairs = request
-               shell_escape = yes
-               output = none
-       }
-
-       #
-       #  This is a more general example of the execute module.
-       #
-       #  This one is called "echo".
-       #
-       #  Attribute-Name = `%{echo:/path/to/program args}`
-       #
-       #  If you wish to execute an external program in more than
-       #  one section (e.g. 'authorize', 'pre_proxy', etc), then it
-       #  is probably best to define a different instance of the
-       #  'exec' module for every section.     
-       #
-       #  The return value of the program run determines the result
-       #  of the exec instance call as follows:
-       #  (See doc/configurable_failover for details)
-       #
-       #  < 0 : fail      the module failed
-       #  = 0 : ok        the module succeeded
-       #  = 1 : reject    the module rejected the user
-       #  = 2 : fail      the module failed
-       #  = 3 : ok        the module succeeded
-       #  = 4 : handled   the module has done everything to handle the request
-       #  = 5 : invalid   the user's configuration entry was invalid
-       #  = 6 : userlock  the user was locked out
-       #  = 7 : notfound  the user was not found
-       #  = 8 : noop      the module did nothing
-       #  = 9 : updated   the module updated information in the request
-       #  > 9 : fail      the module failed
-       #
-       exec echo {
-               #
-               #  Wait for the program to finish.
-               #
-               #  If we do NOT wait, then the program is "fire and
-               #  forget", and any output attributes from it are ignored.
-               #
-               #  If we are looking for the program to output
-               #  attributes, and want to add those attributes to the
-               #  request, then we MUST wait for the program to
-               #  finish, and therefore set 'wait=yes'
-               #
-               # allowed values: {no, yes}
-               wait = yes
-
-               #
-               #  The name of the program to execute, and it's
-               #  arguments.  Dynamic translation is done on this
-               #  field, so things like the following example will
-               #  work.
-               #
-               program = "/bin/echo %{User-Name}"
-
-               #
-               #  The attributes which are placed into the
-               #  environment variables for the program.
-               #
-               #  Allowed values are:
-               #
-               #       request         attributes from the request
-               #       config          attributes from the configuration items list
-               #       reply           attributes from the reply
-               #       proxy-request   attributes from the proxy request
-               #       proxy-reply     attributes from the proxy reply
-               #
-               #  Note that some attributes may not exist at some
-               #  stages.  e.g. There may be no proxy-reply
-               #  attributes if this module is used in the
-               #  'authorize' section.
-               #
-               input_pairs = request
-
-               #
-               #  Where to place the output attributes (if any) from
-               #  the executed program.  The values allowed, and the
-               #  restrictions as to availability, are the same as
-               #  for the input_pairs.
-               #
-               output_pairs = reply
-
-               #
-               #  When to execute the program.  If the packet
-               #  type does NOT match what's listed here, then
-               #  the module does NOT execute the program.
-               #
-               #  For a list of allowed packet types, see
-               #  the 'dictionary' file, and look for VALUEs
-               #  of the Packet-Type attribute.
-               #
-               #  By default, the module executes on ANY packet.
-               #  Un-comment out the following line to tell the
-               #  module to execute only if an Access-Accept is
-               #  being sent to the NAS.
-               #
-               #packet_type = Access-Accept
-
-               #
-               #  Should we escape the environment variables?
-               #  
-               #  If this is set, all the RADIUS attributes
-               #  are capitalised and dashes replaced with
-               #  underscores. Also, RADIUS values are surrounded
-               #  with double-quotes.
-               #
-               #  That is to say: User-Name=BobUser => USER_NAME="BobUser"
-               shell_escape = yes
-
-       }
-
-       #  Do server side ip pool management. Should be added in
-       #  post-auth and accounting sections.
-       #
-       #  The module also requires the existance of the Pool-Name
-       #  attribute. That way the administrator can add the Pool-Name
-       #  attribute in the user profiles and use different pools for
-       #  different users. The Pool-Name attribute is a *check* item
-       #  not a reply item.
-       #
-       #  The Pool-Name should be set to the ippool module instance
-       #  name or to DEFAULT to match any module.
-
-       #
-       # Example:
-       # radiusd.conf: ippool students { [...] }
-       #               ippool teachers { [...] }
-       # users file  : DEFAULT Group == students, Pool-Name := "students"
-       #               DEFAULT Group == teachers, Pool-Name := "teachers"
-       #               DEFAULT Group == other, Pool-Name := "DEFAULT"
-       #
-       # ********* IF YOU CHANGE THE RANGE PARAMETERS YOU MUST *********
-       # ********* THEN ERASE THE DB FILES                     *********
-       #
-       ippool main_pool {
-
-               #  range-start,range-stop:
-               #       The start and end ip addresses for this pool.
-               range-start = 192.168.1.1
-               range-stop = 192.168.3.254
-
-               #  netmask:
-               #       The network mask used for this pool.
-               netmask = 255.255.255.0
-
-               #  cache-size:
-               #       The gdbm cache size for the db files. Should
-               #       be equal to the number of ip's available in
-               #       the ip pool
-               cache-size = 800
-
-               # session-db:
-               #       The main db file used to allocate addresses.
-               session-db = ${confdir}/db.ippool
-
-               # ip-index:
-               #       Helper db index file used in multilink
-               ip-index = ${confdir}/db.ipindex
-
-               # override:
-               #       If set, the Framed-IP-Address already in the
-               #       reply (if any) will be discarded, and replaced
-               #       with a Framed-IP-Address assigned here.
-               override = no
-
-               # maximum-timeout:
-               #       Specifies the maximum time in seconds that an
-               #       entry may be active.  If set to zero, means
-               #       "no timeout".  The default value is 0
-               maximum-timeout = 0
-
-               # key:
-               #       The key to use for the session database (which
-               #       holds the allocated ip's) normally it should
-               #       just be the nas ip/port (which is the default).
-               #
-               #       If your NAS sends the same value of NAS-Port
-               #       all requests, the key should be based on some
-               #       other attribute that is in ALL requests, AND
-               #       is unique to each machine needing an IP address.
-               #key = "%{NAS-IP-Address} %{NAS-Port}"
-       }
-
-       # $INCLUDE sqlippool.conf
-
-       # OTP token support.  Not included by default.
-       # $INCLUDE otp.conf
-
-       #
-       #  Kerberos.  See doc/rlm_krb5 for minimal docs.
-       #
-#      krb5 {
-#              keytab = /path/to/keytab
-#              service_principal = name_of_principle
-#      }
+#      $INCLUDE sqlippool.conf
 }
 
 # Instantiation
@@ -1829,23 +771,31 @@ $INCLUDE policy.conf
 
 ######################################################################
 #
-#      As of 2.0.0, the "authorize", "authenticate", etc. sections
-#      are in separate configuration files, per virtual host.
+#      Load virtual servers.
 #
-######################################################################
+#      This next $INCLUDE line loads files in the directory that
+#      match the regular expression: /[a-zA-Z0-9_.]+/
+#
+#      It allows you to define new virtual servers simply by placing
+#      a file into the raddb/sites-enabled/ directory.
+#
+$INCLUDE sites-enabled/
 
 ######################################################################
 #
-#      Include all enabled virtual hosts.
+#      All of the other configuration sections like "authorize {}",
+#      "authenticate {}", "accounting {}", have been moved to the
+#      the file:
 #
-#      The following directory is searched for files that match
-#      the regex:
+#              raddb/sites-available/default
 #
-#              /[a-zA-Z0-9_.]+/
+#      This is the "default" virtual server that has the same
+#      configuration as in version 1.0.x and 1.1.x.  The default
+#      installation enables this virtual server.  You should
+#      edit it to create policies for your local site.
 #
-#      The files are then included here, just as if they were cut
-#      and pasted into this file.
+#      For more documentation on virtual servers, see:
 #
-#      See "sites-enabled/default" for some additional documentation.
+#              raddb/sites-available/README
 #
-$INCLUDE sites-enabled/
+######################################################################