module: add mysql
diff --git a/module/mysql/holder.sh b/module/mysql/holder.sh
new file mode 100644
index 0000000..0f459ab
--- /dev/null
+++ b/module/mysql/holder.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+#
+# holder.sh - mysql
+#
+# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+# Placeholders must follow a special syntax in order to be considered valid.
+# If they don't, then validation will fail and the process exits with error.
+# These restrictions are described below, so that a holders.sh is considered
+# valid as described below.
+
+_MYSQL_DKRC_SERVICE_="${module}"
+_MYSQL_DKRC_VERSION_="5.7.26"
+_MYSQL_DKRC_IMAGE_="${host_name}-img-${_MYSQL_DKRC_SERVICE_}"
+_MYSQL_DKRC_CONTAINER_="${host_name}-con-${_MYSQL_DKRC_SERVICE_}"
+_MYSQL_DKRC_BACKEND_IP_="172.27.0.2"
+_MYSQL_DKRC_CONTEXT_="$mod_docker_d"
+_MYSQL_DKRC_DOCKERFILE_="$dockerfile"
+_MYSQL_DB_FIELD_USERNAME_="username"
+_MYSQL_DB_FIELD_PASSWORD_="password"
+_MYSQL_DB_FIELD_KEY_="key"
+_MYSQL_DB_FIELD_EXPIRY_="expiry"
+_MYSQL_DB_FIELD_VALUE_="value"
+_MYSQL_DB_TABLE_SESSIONS_="sessions"
+_MYSQL_DB_TABLE_USERS_="users"
+_MYSQL_DB_NAME_="${host_name}_db"
+_MYSQL_DB_PORT_="3306"
+_MYSQL_INITDB_F_="$initdb_f"
+_MYSQL_MYCONF_F_="$mycnf_f"
+_MYSQL_MYSQL_D_="$mysql_d"
+_MYSQL_LOG_D_="$log_d"
+_MYSQL_BACKUP_PATH_="/var/lib/mysql"
+if [ "${mod_mode}" = "${release}" ]; then
+	_MYSQL_GENERAL_LOG_="0"
+	_MYSQL_SLOW_QUERY_LOG_="0"
+	_MYSQL_LOG_OUTPUT_="NONE"
+else
+	_MYSQL_GENERAL_LOG_="1"
+	_MYSQL_SLOW_QUERY_LOG_="1"
+	_MYSQL_LOG_OUTPUT_="FILE"
+fi
+_MYSQL_CON_LOG_D_="/var/log/mysql"
+_MYSQL_CON_ERROR_LOG_F_="${_MYSQL_CON_LOG_D_}/$(basename "$log_error_f")"
+_MYSQL_CON_GENERAL_LOG_F_="${_MYSQL_CON_LOG_D_}/$(basename "$log_general_f")"
+_MYSQL_CON_SLOW_QUERY_LOG_F_="${_MYSQL_CON_LOG_D_}/$(basename "$log_query_f")"
+if [ "$mysql_has_dummy_certs" -eq 1 ]; then
+	_MYSQL_ROOTFS_SSL_D_="$certificates_l"
+	_MYSQL_CON_SSL_D_="/etc/mysql_ssl"
+
+	_MYSQL_SSL_SERVER_CERT_F_="${_MYSQL_CON_SSL_D_}/$(basename "$server_cert_f")"
+	_MYSQL_SSL_SERVER_KEY_F_="${_MYSQL_CON_SSL_D_}/$(basename "$server_key_f")"
+	_MYSQL_SSL_SERVER_CA_F_="${_MYSQL_CON_SSL_D_}/$(basename "$ca_f")"
+
+	_MYSQL_SSL_CLIENT_CERT_F_="${_MYSQL_CON_SSL_D_}/$(basename "$client_cert_f")"
+	_MYSQL_SSL_CLIENT_KEY_F_="${_MYSQL_CON_SSL_D_}/$(basename "$client_key_f")"
+	_MYSQL_SSL_CLIENT_CA_F_="${_MYSQL_CON_SSL_D_}/$(basename "$ca_dup_f")"
+fi
diff --git a/module/mysql/module.sh b/module/mysql/module.sh
new file mode 100644
index 0000000..11215bd
--- /dev/null
+++ b/module/mysql/module.sh
@@ -0,0 +1,223 @@
+#!/bin/bash
+#
+# module.sh - mysql
+#
+# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+declare -r module="mysql"
+source $common_sh
+
+module_enable $module
+
+declare -r etc_d="$mod_rootfs_d/etc"
+declare -r initdb_d="$mod_docker_d"
+declare -r var_d="$mod_rootfs_d/var"
+
+declare -r mycnf_d="$etc_d/mysql"
+declare -r mysql_d="$var_d/lib/mysql"
+declare -r log_d="$var_d/log/mysql"
+
+declare -ir mysql_uid="999"
+
+declare -ir mysql_has_dummy_certs=1
+if [ $mysql_has_dummy_certs -eq 1 ]; then
+	declare -r certificates_d="$mod_staging_d/${module}_dummy_cert"
+	declare -r ca_key_f="$certificates_d/${module}_dummy-ca-key.pem"
+	declare -r ca_f="$certificates_d/${module}_dummy-ca.pem"
+
+	declare -r server_key_f="$certificates_d/${module}_dummy-server-key.pem"
+	declare -r server_req_f="$certificates_d/${module}_dummy-server-req.pem"
+	declare -r server_cert_f="$certificates_d/${module}_dummy-server-cert.pem"
+
+	declare -r client_key_f="$certificates_d/${module}_dummy-client-key.pem"
+	declare -r client_req_f="$certificates_d/${module}_dummy-client-req.pem"
+	declare -r client_cert_f="$certificates_d/${module}_dummy-client-cert.pem"
+
+	# Dup ca to avoid bind mounting the same file twice
+	declare -r ca_dup_f="$certificates_d/${module}_dummy-ca-dup.pem"
+else
+	lets -l -e "official CA certificates not supported"
+	exit 1
+fi
+declare -r certificates_l="$etc_d/mysql_ssl"
+
+# Output files
+declare -r dockerfile="Dockerfile"
+declare -r dockerfile_f="$mod_docker_d/$dockerfile"
+declare -r initdb_f="$initdb_d/initdb.sql"
+declare -r mycnf_f="$mycnf_d/my.cnf"
+declare -r log_error_f="$log_d/error.txt"
+declare -r log_general_f="$log_d/general.txt"
+declare -r log_query_f="$log_d/query.txt"
+declare -r mysql_cli_bang_f="$mod_docker_d/mysql-cli.sh"
+
+declare -ar mod_more_dirs=( \
+	$etc_d $initdb_d $var_d $mycnf_d $log_d $mysql_d \
+)
+
+declare -ar mod_more_files=( $mycnf_f $initdb_f $dockerfile_f $mysql_cli_bang_f )
+declare -ar mod_more_trefs=( mycnf_t initdb_t dockerfile_t mysql_cli_bang_t )
+
+function tod_watch
+{
+	__watch_module_common || return $s_err
+}
+
+function tod_doins
+{
+	__doins_module_common || return $s_err
+	__mysql_do_log_files  || return $s_err
+
+	# Use certificates provided by Apache
+	__mysql_do_dummy_cert || return $s_err
+	__mysql_do_links      || return $s_err
+}
+
+function tod_clins
+{
+	__clins_module_common  || return $s_err
+	__mysql_undo_log_files || return $s_err
+}
+
+function tod_upins
+{
+	__upins_module_common || return $s_err
+
+	# Use ceritificates provided by Apache
+	__mysql_do_dummy_cert || return $s_err
+}
+
+function tod_doall
+{
+	tod_doins
+}
+
+function tod_upall
+{
+	tod_upins
+}
+
+function __mysql_do_dummy_cert_helper
+{
+	# Credits:
+	# https://techsparx.com/software-development/docker/damp/mysql-ssl-connection.html
+
+	local -r OPENSSL_SUBJ="/C=US/ST=Utopia/L=Neverland"
+	local -r OPENSSL_CA="${OPENSSL_SUBJ}/CN=dummy-CA"
+	local -r OPENSSL_SERVER="${OPENSSL_SUBJ}/CN=dummy-server"
+	local -r OPENSSL_CLIENT="${OPENSSL_SUBJ}/CN=dummy-client"
+
+	# Generate new CA certificate ca.pem file.
+	openssl genrsa 2048 > $ca_key_f
+
+	# TODO This has interaction that must be automated
+	openssl req -new -x509 -nodes -days 3600 \
+			-subj "${OPENSSL_CA}" \
+			-key $ca_key_f -out $ca_f
+
+	# Create the server-side certificates
+	# This has more interaction that must be automated
+
+	openssl req -newkey rsa:2048 -days 3600 -nodes \
+			-subj "${OPENSSL_SERVER}" \
+			-keyout $server_key_f -out $server_req_f
+	openssl rsa -in $server_key_f -out $server_key_f
+
+	openssl x509 -req -in $server_req_f -days 3600 \
+			-CA $ca_f -CAkey $ca_key_f -set_serial 01 -out $server_cert_f
+
+	# Create the client-side certificates
+	openssl req -newkey rsa:2048 -days 3600 -nodes \
+			-subj "${OPENSSL_CLIENT}" \
+			-keyout $client_key_f -out $client_req_f
+	openssl rsa -in $client_key_f -out $client_key_f
+
+	openssl x509 -req -in $client_req_f -days 3600 \
+			-CA $ca_f -CAkey $ca_key_f -set_serial 01 -out $client_cert_f
+
+	# Verify the certificates are correct
+	openssl verify -CAfile \
+			$ca_f $server_cert_f $client_cert_f || return $s_err
+
+	# Duplicate ca as it needs to be mounted client side
+	cp -ar $ca_f $ca_dup_f
+
+	set_mode "0644" $mysql_uid \
+			 $ca_f $ca_dup_f \
+			 $server_key_f $server_req_f $server_cert_f \
+			 $client_key_f $client_req_f $client_cert_f || return $s_err
+
+	set_mode "0600" $mysql_uid $ca_key_f || return $s_err
+}
+
+function __mysql_do_dummy_cert
+{
+	if [ $mysql_has_dummy_certs -eq 1 ]; then
+		if [ ! -d $certificates_d ]; then
+			mkdir -p $certificates_d && \
+				pushd $certificates_d >/dev/null || return $s_err
+			__mysql_do_dummy_cert_helper 2>&1 | lets -l -x "openssl"
+			case "${PIPESTATUS[0]}" in
+				$s_err ) lets -l -e "failed to make dummy certificates"
+						 popd >/dev/null; return $s_err ;;
+			esac
+			popd >/dev/null
+		fi
+	fi;
+
+	lets -l -i "$module SSL cert from: ${certificates_d#$script_dir/}"
+	return $s_ok
+}
+
+function __mysql_do_links
+{
+	# NOTE: container path must match localhost path
+	#
+	# i.e.
+	#    localhost:/etc container:/etc                 OK
+	#    localhost:/home/luigi container:/home/???     NOT OK
+	#
+	ln -sf "${certificates_d}" "${certificates_l}"
+}
+
+function __mysql_do_log_files
+{
+	sudo touch $log_error_f $log_general_f $log_query_f || {
+		lets -l -e "failed to touch log files"; return $s_err
+	}
+
+	set_mode "0755" $mysql_uid $log_d || {
+		lets -l -e "failed to set mode $log_d"; return $s_err
+	}
+
+	set_mode "0644" $mysql_uid $log_error_f $log_general_f $log_query_f || {
+		lets -l -e "failed to set mode log files"; return $s_err
+	}
+}
+
+function __mysql_undo_log_files
+{
+	sudo rm -f $log_error_f $log_general_f $log_query_f || {
+		lets -l -e "failed remove log files"; return $s_err
+	}
+
+	__mysql_do_log_files
+}
diff --git a/module/mysql/scheme.sh b/module/mysql/scheme.sh
new file mode 100644
index 0000000..994152a
--- /dev/null
+++ b/module/mysql/scheme.sh
@@ -0,0 +1,255 @@
+#!/bin/bash
+#
+# mysql templates
+#
+# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+declare -r mycnf_t="\
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+# https://dev.mysql.com/doc/refman/${_MYSQL_DKRC_VERSION_:0:3}/en/server-system-variables.html
+
+!includedir /etc/mysql/conf.d/
+!includedir /etc/mysql/mysql.conf.d/
+
+[mysqld]
+
+# Always enable SSL
+require_secure_transport = ON
+
+# Certificates (use self signed)
+ssl-cert=${_MYSQL_SSL_SERVER_CERT_F_}
+ssl-key=${_MYSQL_SSL_SERVER_KEY_F_}
+ssl-ca=${_MYSQL_SSL_SERVER_CA_F_}
+
+# Logs
+general_log = ${_MYSQL_GENERAL_LOG_}
+log_output = ${_MYSQL_LOG_OUTPUT_}
+slow_query_log = ${_MYSQL_SLOW_QUERY_LOG_}
+long_query_time = 2
+log_error_verbosity = 3
+general_log_file = ${_MYSQL_CON_GENERAL_LOG_F_}
+slow_query_log_file = ${_MYSQL_CON_SLOW_QUERY_LOG_F_}
+log_error = ${_MYSQL_CON_ERROR_LOG_F_}
+
+port=${_MYSQL_DB_PORT_}
+explicit_defaults_for_timestamp = TRUE
+#connect_timeout = 1000000
+#net_write_timeout = 1000000
+#wait_timeout = 1000000
+#max_allowed_packet = 1024M
+#interactive_timeout = 1000000
+#net_buffer_length = 200M
+#net_read_timeout = 1000000
+#bind-address = *
+#innodb_data_file_path=
+
+#[mysqld_safe]"
+
+declare -r initdb_t="\
+CREATE DATABASE IF NOT EXISTS \`${_MYSQL_DB_NAME_}\`;
+
+use ${_MYSQL_DB_NAME_};
+
+CREATE TABLE IF NOT EXISTS \`${_MYSQL_DB_TABLE_USERS_}\` (
+\`id\` int(10) unsigned NOT NULL AUTO_INCREMENT,
+\`${_MYSQL_DB_FIELD_USERNAME_}\` varchar(20) NOT NULL,
+\`group\` int(10) unsigned NOT NULL default 1,
+\`status\` int(5) unsigned NOT NULL default 0,
+\`email\` varchar(50) NOT NULL,
+\`${_MYSQL_DB_FIELD_PASSWORD_}\` varchar(64) NOT NULL,
+\`created\` datetime NOT NULL default current_timestamp,
+\`updated\` timestamp NOT NULL default current_timestamp on update current_timestamp,
+PRIMARY KEY (\`id\`),
+UNIQUE KEY useremail (\`email\`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS \`${_MYSQL_DB_TABLE_SESSIONS_}\` (
+\`id\` varchar(128) NOT NULL,
+\`ip_address\` varchar(45) NOT NULL,
+\`timestamp\` int(10) unsigned DEFAULT 0 NOT NULL,
+\`data\` blob NOT NULL,
+PRIMARY KEY \`ci_sessions_id\` (\`id\`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
+
+if [ "${mod_mode}" = "${release}" ]; then
+	declare -rg dockerfile_debug_tools_t=""
+else
+	declare -rg dockerfile_debug_tools_t="\
+# debug only
+RUN apt-get -y install nmap
+RUN apt-get -y install net-tools"
+fi
+
+declare -r dockerfile_t="\
+ARG VERSION=${_MYSQL_DKRC_VERSION_}
+FROM mysql:\$VERSION
+
+RUN apt-get update
+${dockerfile_debug_tools_t}
+
+# Add SQL configuration file into autoloaded default location
+COPY initdb.sql /docker-entrypoint-initdb.d/
+
+# MYSQL seems quite strict about files mode
+RUN mkdir -p ${_MYSQL_CON_LOG_D_} && \\
+    chown mysql:mysql /var/log/mysql && \\
+    touch ${_MYSQL_CON_GENERAL_LOG_F_} && \\
+    chown mysql:mysql ${_MYSQL_CON_GENERAL_LOG_F_} && \\
+    touch ${_MYSQL_CON_ERROR_LOG_F_} && \\
+    chown mysql:mysql ${_MYSQL_CON_ERROR_LOG_F_} && \\
+    touch ${_MYSQL_CON_SLOW_QUERY_LOG_F_} && \\
+    chown mysql:mysql ${_MYSQL_CON_SLOW_QUERY_LOG_F_}"
+
+declare -r mysql_cli_bang_t="\
+#!/bin/bash
+
+if (return 0 2>/dev/null); then
+	echo \"You must run this script\" >&2
+	return 1
+fi
+
+declare -r running_services=\\
+\"sudo -E docker-compose ps --services --filter \\\"status=running\\\"\"
+
+function source_passwd_file
+{
+	sudo whoami >/dev/null # cache password
+
+	if [ ! -f \"\${PASSWD_F}\" ]; then
+		echo \"error: PASSWD file not found\" >&2
+		exit 1
+	fi
+
+	if ! source \"\${PASSWD_F}\"; then
+		echo \"error: PASSWD file not sourced\" >&2
+		exit 1
+	fi
+}
+
+set -eu
+
+case \"\$1\" in
+	--help       ) cat <<EOF; exit 0
+`printf \"\\033[1m%s\\033[0m\\n\" \"NAME\"`
+
+  \${BASH_SOURCE[0]//.\//} - Mysql CLI for ${host_name}
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"USAGE\"`
+
+  \$ \${BASH_SOURCE[0]} [ OPTION ] [ ARGS ... ]
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"ENVIRONMENT\"`
+
+  PASSWD_F        path to file containing runtime credentials
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"OPTION\"`
+
+  --set-status    string <email> integer <status>. Set the status
+                  field for a user given its email
+  --export        export mysql database to utf-8 text file
+  --import        import a mysql database from an utf-8 text file
+  --help          show this help
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"END\"`
+EOF
+		;;
+	--export     )
+		source_passwd_file
+		declare -r now=\"\$(date +'%d%m%Y%H%M%S')\"
+		declare -r backup_name=\"${_MYSQL_DKRC_CONTAINER_}_${_MYSQL_DB_NAME_}-\${now}.sql\"
+		declare -r backup_path=\"${_MYSQL_BACKUP_PATH_}\"
+		declare -r backup_file=\"\${backup_path}/\${backup_name}\"
+
+		pushd \"${instance_d}\" >/dev/null || exit 1
+		if eval \"\${running_services}\" | grep -q -- \"${_MYSQL_DKRC_SERVICE_}\"; then
+			if ! (sudo -E docker exec ${_MYSQL_DKRC_CONTAINER_} /usr/bin/mysqldump \\
+					-u root --password=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} \\
+					--databases ${_MYSQL_DB_NAME_} --result-file=\${backup_file}); then
+				echo \"error: cannot export database\"
+				popd >/dev/null
+				exit 1
+			fi
+			sudo chmod 0400 ${_MYSQL_MYSQL_D_}/\${backup_name}
+			suod mv ${_MYSQL_MYSQL_D_}/\${backup_name} \$(pwd)
+			echo \"success: \$(pwd)/\${backup_name}\"
+		else
+			echo \"error: ${_MYSQL_DKRC_SERVICE_} not running\"
+			popd >/dev/null
+			exit 1
+		fi ;;
+	--import     )
+		source_passwd_file
+		declare -r input_sql_bkp=\"\$(realpath \"\$2\")\"
+		if [ ! -f \"\${input_sql_bkp}\" ]; then
+			echo \"error: \${input_sql_bkp:-undefined}: file not found\"
+			exit 1
+		fi
+
+		pushd \"${instance_d}\" >/dev/null || exit 1
+		if eval \"\${running_services}\" | grep -q -- \"${_MYSQL_DKRC_SERVICE_}\"; then
+			if ! (sudo cat \"\${input_sql_bkp}\" | sudo -E docker exec -i ${_MYSQL_DKRC_CONTAINER_} \\
+					/usr/bin/mysql -u root --password=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} ${_MYSQL_DB_NAME_}); then
+				echo \"error: cannot import database\"
+				popd >/dev/null
+				exit 1
+			fi
+			echo \"success: \${input_sql_bkp}\"
+		else
+			echo \"error: ${_MYSQL_DKRC_SERVICE_} not running\"
+			popd >/dev/null
+			exit 1
+		fi ;;
+	--set-status )
+		source_passwd_file
+		declare -r email=\"\$2\"
+		declare -r status=\"\$3\"
+		declare -r query=\"UPDATE users SET status = \${status} WHERE email = '\${email}'\"
+
+		pushd \"${instance_d}\" >/dev/null || exit 1
+		if eval \"\${running_services}\" | grep -q -- \"${_MYSQL_DKRC_SERVICE_}\"; then
+			if ! (sudo -E docker exec -i ${_MYSQL_DKRC_CONTAINER_} \\
+					/usr/bin/mysql -u root --password=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} \\
+					-D ${_MYSQL_DB_NAME_} -e \"\${query}\"); then
+				echo \"error: cannot update status\"
+				popd >/dev/null
+				exit 1
+			fi
+			echo \"success: status updated\"
+		else
+			echo \"error: ${_MYSQL_DKRC_SERVICE_} not running\"
+			popd >/dev/null
+			exit 1
+		fi ;;
+esac"