# -*- text -*-
##
## sql.conf -- SQL modules
##
##	$Id: e1431d634a28f20a0e5deaeedd66a161deb88eb7 $

######################################################################
#
#  Configuration for the SQL module
#
#  The database schemas and queries are located in subdirectories:
#
#	sql/<DB>/main/schema.sql	Schema
#	sql/<DB>/main/queries.conf	Authorisation and Accounting queries
#
#  Where "DB" is mysql, mssql, oracle, or postgresql.
#
#

sql {
	# The sub-module to use to execute queries. This should match
	# the database you're attempting to connect to.
	#
	#    * rlm_sql_mysql
	#    * rlm_sql_mssql
	#    * rlm_sql_oracle
	#    * rlm_sql_postgresql
	#    * rlm_sql_sqlite
	#    * rlm_sql_null (log queries to disk)
	#
	driver = "rlm_sql_sqlite"
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}
 
	sqlite {
		filename = "/opt/db/radius.sqlite3"
	}

#
#	Several drivers accept specific options, to set them, a
#	config section with the the name as the driver should be added
#	to the sql instance.
#
#	Driver specific options are:
#
#	sqlite {
#		# Path to the sqlite database
#		filename = "/my/sqlite/database.db"
#
#		# If the file above does not exist and bootstrap is set
#		# a new database file will be created, and the SQL statements
#		# contained within the file will be executed.
#		bootstrap = "/my/sqlite/schema.sql"
# 	}
#
#	mysql {
#		# If any of the below files are set tls encryption is enabled
#		tls {
#			ca_file = "/etc/ssl/certs/my_ca.crt"
#			ca_path = "/etc/ssl/certs/"
#			certificate_file = "/etc/ssl/certs/private/client.crt"
#			private_key_file = "/etc/ssl/certs/private/client.key"
#			cipher = "DHE-RSA-AES256-SHA:AES128-SHA"
#		}
#	}
#

	# The dialect of SQL you want to use, this should usually match
	# the driver you selected above.
	#
	# If you're using rlm_sql_null, then it should be the type of
	# database the logged queries are going to be executed against.
	dialect = "sqlite"

	# Connection info:
	#
#	server = "localhost"
#	port = 3306
#	login = "radius"
#	password = "radpass"

	# Database table configuration for everything except Oracle
	radius_db = "radius"

	# If you are using Oracle then use this instead
#	radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=your_sid)))"

	# If you're using postgresql this can also be used instead of the connection info parameters
#	radius_db = "dbname=radius host=localhost user=radius password=raddpass"

	# If you want both stop and start records logged to the
	# same SQL table, leave this as is.  If you want them in
	# different tables, put the start table in acct_table1
	# and stop table in acct_table2
	acct_table1 = "radacct"
	acct_table2 = "radacct"

	# Allow for storing data after authentication
	postauth_table = "radpostauth"

	# Tables containing 'check' items
	authcheck_table = "radcheck"
	groupcheck_table = "radgroupcheck"

	# Tables containing 'reply' items
	authreply_table = "radreply"
	groupreply_table = "radgroupreply"

	# Table to keep group info
	usergroup_table = "radusergroup"

	# If set to 'yes' (default) we read the group tables
	# If set to 'no' the user MUST have Fall-Through = Yes in the radreply table
	# read_groups = yes

	# Remove stale session if checkrad does not see a double login
	delete_stale_sessions = yes

	# Write SQL queries to a logfile. This is potentially useful for tracing
	# issues with authorization queries.
#	logfile = ${logdir}/sqllog.sql

	#  As of version 3.0, the "pool" section has replaced the
	#  following configuration items:
	#
	#  num_sql_socks
	#  connect_failure_retry_delay
	#  lifetime
	#  max_queries

	#
	#  The connection pool is new for 3.0, and will be used in many
	#  modules, for all kinds of connection-related activity.
	#
	# When the server is not threaded, the connection pool
	# limits are ignored, and only one connection is used.
	#
	pool {
		# Number of connections to start
		start = 5

		# Minimum number of connections to keep open
		min = 4

		# Maximum number of connections
		#
		# If these connections are all in use and a new one
		# is requested, the request will NOT get a connection.
		#
		# Setting 'max' to LESS than the number of threads means
		# that some threads may starve, and you will see errors
		# like "No connections available and at max connection limit"
		#
		# Setting 'max' to MORE than the number of threads means
		# that there are more connections than necessary.
		#
		max = ${thread[pool].max_servers}

		# Spare connections to be left idle
		#
		# NOTE: Idle connections WILL be closed if "idle_timeout"
		# is set.
		spare = 3

		# Number of uses before the connection is closed
		#
		# 0 means "infinite"
		uses = 0

		# The lifetime (in seconds) of the connection
		lifetime = 0

		# idle timeout (in seconds).  A connection which is
		# unused for this length of time will be closed.
		idle_timeout = 60

		# NOTE: All configuration settings are enforced.  If a
		# connection is closed because of "idle_timeout",
		# "uses", or "lifetime", then the total number of
		# connections MAY fall below "min".  When that
		# happens, it will open a new connection.  It will
		# also log a WARNING message.
		#
		# The solution is to either lower the "min" connections,
		# or increase lifetime/idle_timeout.
	}

	# Set to 'yes' to read radius clients from the database ('nas' table)
	# Clients will ONLY be read on server startup.
#	read_clients = yes

	# Table to keep radius client info
	client_table = "nas"

	# Read database-specific queries
	$INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}
