diff options
author | Andrei Pavel <andrei@isc.org> | 2021-03-19 12:25:06 +0100 |
---|---|---|
committer | Andrei Pavel <andrei@isc.org> | 2021-03-19 12:25:07 +0100 |
commit | 1022b07c7b2e55188364fe7c2dccf8978176d4f8 (patch) | |
tree | 7ce1a3cb47997ea2c9a59732a3466c7c57b9461d /src/bin | |
parent | [#1757] hammer: fixed installing cassandra (diff) | |
download | kea-1022b07c7b2e55188364fe7c2dccf8978176d4f8.tar.xz kea-1022b07c7b2e55188364fe7c2dccf8978176d4f8.zip |
[#1674] kea-admin: new -P|--port parameter
Diffstat (limited to 'src/bin')
-rw-r--r-- | src/bin/admin/admin-utils.sh | 62 | ||||
-rw-r--r-- | src/bin/admin/kea-admin.in | 12 |
2 files changed, 64 insertions, 10 deletions
diff --git a/src/bin/admin/admin-utils.sh b/src/bin/admin/admin-utils.sh index 08802bcfe9..906fe37487 100644 --- a/src/bin/admin/admin-utils.sh +++ b/src/bin/admin/admin-utils.sh @@ -8,6 +8,15 @@ # This is an utility script that is being included by other scripts. +# shellcheck disable=SC2086 +# SC2086: Double quote to prevent globbing and word splitting. +# Explicitly don't quote db_port_full_parameter so it doesn't expand to empty +# string if it is not set. + +# shellcheck disable=SC2154 +# SC2154: ... is referenced but not assigned. +# Some variables are assigned in kea-admin. + # Exit with error if commands exit with non-zero and if undefined variables are # used. set -eu @@ -23,8 +32,6 @@ db_name='keatest' # output in ${OUTPUT} and exit code in ${EXIT_CODE}. Does not support pipes and # redirections. Support for them could be added through eval and single # parameter assignment, but eval is not recommended. -# shellcheck disable=SC2034 -# SC2034: ... appears unused. Verify use (or export if used externally). run_command() { if test -n "${DEBUG+x}"; then printf '%s\n' "${*}" >&2 @@ -35,6 +42,21 @@ run_command() { set -e } +mysql_sanity_checks() { + # https://bugs.mysql.com/bug.php?id=55796#c321360 + # https://dev.mysql.com/doc/refman/8.0/en/connecting.html + # On Unix, MySQL programs treat the host name localhost specially, in a way + # that is likely different from what you expect compared to other + # network-based programs: the client connects using a Unix socket file. + if test -n "${db_port+x}" && \ + { test "${db_host}" = 'localhost' || \ + test "${db_host}" = '127.0.0.1'; }; then + printf 'Warning: the MySQL client uses the default unix socket ' >&2 + printf 'instead of TCP port %s ' "${db_port}" >&2 + printf 'when connecting to localhost. Continuing...\n' >&2 + fi +} + # There are two ways of calling this method. # mysql_execute SQL_QUERY - This call is simpler, but requires db_user, # db_password and db_name variables to be set. @@ -47,22 +69,28 @@ run_command() { mysql_execute() { QUERY=$1 shift + + mysql_sanity_checks + if [ $# -gt 1 ]; then mysql -N -B "$@" -e "${QUERY}" else - # Shellcheck complains about variables not being set. They're set in the script that calls this script. - # shellcheck disable=SC2154 - mysql -N -B --host="${db_host}" --database="${db_name}" --user="${db_user}" --password="${db_password}" -e "${QUERY}" + mysql -N -B --host="${db_host}" ${db_port_full_parameter-} \ + --database="${db_name}" --user="${db_user}" --password="${db_password}" -e "${QUERY}" fi } mysql_execute_script() { file=$1 shift + + mysql_sanity_checks + if [ $# -ge 1 ]; then mysql -N -B "$@" < "${file}" else - mysql -N -B --host="${db_host}" --database="${db_name}" --user="${db_user}" --password="${db_password}" < "${file}" + mysql -N -B --host="${db_host}" ${db_port_full_parameter-} \ + --database="${db_name}" --user="${db_user}" --password="${db_password}" < "${file}" fi } @@ -97,10 +125,12 @@ pgsql_execute() { QUERY=$1 shift if [ $# -gt 0 ]; then - echo "${QUERY}" | psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" -q "$@" + echo "${QUERY}" | psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" \ + ${db_port_full_parameter-} -q "$@" else export PGPASSWORD=$db_password - echo "${QUERY}" | psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" -q -U "${db_user}" -d "${db_name}" + echo "${QUERY}" | psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" \ + ${db_port_full_parameter-} -q -U "${db_user}" -d "${db_name}" fi } @@ -118,10 +148,12 @@ pgsql_execute_script() { file=$1 shift if [ $# -gt 0 ]; then - psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" -q -f "${file}" "$@" + psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" \ + ${db_port_full_parameter-} -q -f "${file}" "$@" else export PGPASSWORD=$db_password - psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" -q -U "${db_user}" -d "${db_name}" -f "${file}" + psql --set ON_ERROR_STOP=1 -A -t -h "${db_host}" \ + ${db_port_full_parameter-} -q -U "${db_user}" -d "${db_name}" -f "${file}" fi } @@ -145,6 +177,11 @@ checked_pgsql_version() { cql_execute() { query=$1 shift + + if test -n "${db_port+x}"; then + export CQLSH_PORT="${db_port}" + fi + if [ $# -gt 1 ]; then run_command \ cqlsh "$@" -e "$query" @@ -164,6 +201,11 @@ cql_execute() { cql_execute_script() { file=$1 shift + + if test -n "${db_port+x}"; then + export CQLSH_PORT="${db_port}" + fi + if [ $# -gt 1 ]; then run_command \ cqlsh "$@" -e "$file" diff --git a/src/bin/admin/kea-admin.in b/src/bin/admin/kea-admin.in index 206ca5e68d..d77fd7ede6 100644 --- a/src/bin/admin/kea-admin.in +++ b/src/bin/admin/kea-admin.in @@ -70,6 +70,7 @@ BACKEND - one of the supported backends: memfile|mysql|pgsql|cql PARAMETERS: Parameters are optional in general, but may be required for specific operation. -h or --host hostname - specifies a hostname of a database to connect to + -P or --port port - the TCP port to use for the database connection -u or --user name - specifies username when connecting to a database -p or --password pass - specifies a password when connecting to a database -n or --name database - specifies a database name to connect to @@ -723,6 +724,17 @@ do exit 1 fi ;; + # Specify database port + -P|--port) + shift + if test -z "${1+x}"; then + log_error '-P or --port requires a parameter' + usage + exit 1 + fi + db_port=${1} + export db_port_full_parameter="--port=${db_port}" + ;; # Specify database user -u|--user) shift |