mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 14:35:29 +00:00
[#1574] make all shell scripts POSIX compliant
* solve all shellcheck warnings * shebang in all scripts * set -eu everywhere * make scripts callable from everywhere * quote variables to prevent globbing and word splitting * add missing copyrights * remove unused variables * use $() instead of backticks `` ... and so on
This commit is contained in:
@@ -1,78 +1,88 @@
|
||||
#!/bin/sh
|
||||
|
||||
prefix=@prefix@
|
||||
# Copyright (C) 2019-2020 Internet Systems Consortium, Inc. ("ISC")
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
# SC1091: Not following: ... was not specified as input (see shellcheck -x).
|
||||
|
||||
# shellcheck disable=SC2039
|
||||
# SC2039: In POSIX sh, 'local' is undefined.
|
||||
|
||||
# Exit with error if commands exit with non-zero and if undefined variables are
|
||||
# used.
|
||||
set -eu
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
# SC2034: ... appears unused. Verify use (or export if used externally).
|
||||
prefix="@prefix@"
|
||||
|
||||
# Include utilities. Use installed version if available and
|
||||
# use build version if it isn't.
|
||||
if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
|
||||
. @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh
|
||||
. "@datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh"
|
||||
else
|
||||
. @abs_top_builddir@/src/bin/admin/admin-utils.sh
|
||||
. "@abs_top_builddir@/src/bin/admin/admin-utils.sh"
|
||||
fi
|
||||
|
||||
VERSION=`mysql_version "$@"`
|
||||
|
||||
# We need to set global RESULT when we exit. This is checked by callers.
|
||||
bail() {
|
||||
RESULT=$1
|
||||
exit $1
|
||||
}
|
||||
VERSION=$(mysql_version "$@")
|
||||
|
||||
if [ "$VERSION" != "8.1" ]; then
|
||||
printf "This script upgrades 8.1 to 8.2. Reported version is $VERSION. Skipping upgrade.\n"
|
||||
bail 0
|
||||
printf 'This script upgrades 8.1 to 8.2. '
|
||||
printf 'Reported version is %s. Skipping upgrade.\n' "${VERSION}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get the schema name from database argument. We need this to
|
||||
# query information_schema for the right database.
|
||||
for arg in $@
|
||||
for arg in "${@}"
|
||||
do
|
||||
cnt=`echo $arg | grep -c "^\-\-"`
|
||||
if [ $cnt -eq 0 ]
|
||||
if ! grep -Eq '^\-\-' <<<"${arg}"
|
||||
then
|
||||
schema="$arg"
|
||||
break;
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Make sure we can id the schema
|
||||
if [ -z $schema ]
|
||||
if [ -z "$schema" ]
|
||||
then
|
||||
printf "Could not find database schema name in cmd line args: $@\n"
|
||||
bail 255
|
||||
printf "Could not find database schema name in cmd line args: %s\n" "${*}"
|
||||
exit 255
|
||||
fi
|
||||
|
||||
# Save the command line args, as we use these later change_column function.
|
||||
cmdargs="$@"
|
||||
# Save the command line args, as we use these later change_column function.
|
||||
cmdargs=("${@}")
|
||||
|
||||
# Function to rename a column in a table.
|
||||
change_column() {
|
||||
local schema="$1"
|
||||
local table="$2"
|
||||
local ocolumn="$3"
|
||||
local ncolumn="$4"
|
||||
local schema="${1-}"
|
||||
local table="${2-}"
|
||||
local ocolumn="${3-}"
|
||||
local ncolumn="${4-}"
|
||||
|
||||
# First let's find out if the column name in the table actually needs updating.
|
||||
sql="select count(column_name) from information_schema.columns where table_schema='$schema' and table_name = '$table' and column_name = '$ocolumn'"
|
||||
|
||||
count=`mysql -N -B $cmdargs -e "$sql"`
|
||||
if [ $? -ne 0 ]
|
||||
if ! count=$(mysql -N -B "${cmdargs[@]}" -e "$sql")
|
||||
then
|
||||
printf "change_column: schema query failed [$sql]\n"
|
||||
bail 255;
|
||||
printf 'change_column: schema query failed [%s]\n' "${sql}"
|
||||
exit 255
|
||||
fi
|
||||
|
||||
# If we found a match record, the column needs to be renamed
|
||||
# If we found a match record, the column needs to be renamed
|
||||
if [ "$count" -eq 1 ]
|
||||
then
|
||||
sql="ALTER TABLE $table CHANGE COLUMN $ocolumn $ncolumn"
|
||||
mysql -N -B $cmdargs -e "$sql"
|
||||
if [ $? -ne 0 ]
|
||||
if ! mysql -N -B "${cmdargs[@]}" -e "$sql"
|
||||
then
|
||||
printf "change_column: alter query failed: [$sql]\n"
|
||||
bail 255;
|
||||
printf 'change_column: alter query failed [%s]\n' "${sql}"
|
||||
exit 255
|
||||
fi
|
||||
else
|
||||
printf "$table column is already correct\n"
|
||||
printf '%s column is already correct\n' "${table}"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -485,15 +495,7 @@ SET version = '8', minor = '2';
|
||||
|
||||
EOF
|
||||
|
||||
RESULT=$?
|
||||
if [ $RESULT -ne 0 ]
|
||||
then
|
||||
exit $RESULT
|
||||
fi
|
||||
|
||||
# We need to rename the columns in the option def tables because "array" is
|
||||
# a MySQL keyword as of 8.0.17
|
||||
change_column $schema dhcp4_option_def array "is_array TINYINT(1) NOT NULL"
|
||||
change_column $schema dhcp6_option_def array "is_array TINYINT(1) NOT NULL"
|
||||
|
||||
bail 0
|
||||
change_column "${schema}" dhcp4_option_def array "is_array TINYINT(1) NOT NULL"
|
||||
change_column "${schema}" dhcp6_option_def array "is_array TINYINT(1) NOT NULL"
|
||||
|
Reference in New Issue
Block a user