Changes to automatically provision,build and run Radius containers for Auth tests.
Changes to cord test server to handle radius server restart requests.
diff --git a/src/test/setup/radius-config/freeradius/mods-available/sql b/src/test/setup/radius-config/freeradius/mods-available/sql
new file mode 100644
index 0000000..f4c92d5
--- /dev/null
+++ b/src/test/setup/radius-config/freeradius/mods-available/sql
@@ -0,0 +1,971 @@
+# -*- 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"
+ }
+
+#
+# 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
+}