#
#  This file contains the configuration for experimental modules.
#
#  By default, it is NOT included in the build.
#
#  $Id: 87d9744a4f0fa7b9b06b4908ddd6b7d2f1a7fd62 $
#

# Configuration for the Python module.
#
# Where radiusd is a Python module, radiusd.py, and the
# function 'authorize' is called.  Here is a dummy piece
# of code:
#
#	def authorize(params):
#		print params
#		return (5, ('Reply-Message', 'banned'))
#
# The RADIUS value-pairs are passed as a tuple of tuple
# pairs as the first argument, e.g. (('attribute1',
# 'value1'), ('attribute2', 'value2'))
#
# The function return is a tuple with the first element
# being the return value of the function.
# The 5 corresponds to RLM_MODULE_USERLOCK. I plan to
# write the return values as Python symbols to avoid
# confusion.
#
# The remaining tuple members are the string form of
# value-pairs which are passed on to pairmake().
#
python {
	mod_instantiate = radiusd_test
	func_instantiate = instantiate

	mod_authorize = radiusd_test
	func_authorize = authorize

	mod_accounting = radiusd_test
	func_accounting = accounting

	mod_pre_proxy = radiusd_test
	func_pre_proxy = pre_proxy

	mod_post_proxy = radiusd_test
	func_post_proxy = post_proxy

	mod_post_auth = radiusd_test
	func_post_auth = post_auth

	mod_recv_coa = radiusd_test
	func_recv_coa = recv_coa

	mod_send_coa = radiusd_test
	func_send_coa = send_coa

	mod_detach = radiusd_test
	func_detach = detach
}


# Configuration for the example module.  Uncommenting it will cause it
# to get loaded and initialised, but should have no real effect as long
# it is not referenced in one of the autz/auth/preacct/acct sections
example {
	#  Boolean variable.
	# allowed values: {no, yes}
	boolean = yes

	#  An integer, of any value.
	integer = 16

	#  A string.
	string = "This is an example configuration string"

	# An IP address, either in dotted quad (1.2.3.4) or hostname
	# (example.com)
	ipaddr = 127.0.0.1

	# A subsection
	mysubsection {
		anotherinteger = 1000
		# They nest
		deeply nested {
			string = "This is a different string"
		}
	}
}

#
#  To create a dbm users file, do:
#
#   cat test.users | rlm_dbm_parser -f /etc/raddb/users_db
#
#  Then add 'dbm' in 'authorize' section.
#
#  Note that even if the file has a ".db" or ".dbm" extension,
#  you may have to specify it here without that extension.  This
#  is because the DBM libraries "helpfully" add a ".db" to the
#  filename, but don't check if it's already there.
#
dbm {
	usersfile = ${confdir}/users_db
}

# Instantiate a couple instances of the idn module
idn {
}

# ...more commonly known as...
idn idna {
}

idn idna_lenient {
	UseSTD3ASCIIRules = no
}
