2
0
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:
Andrei Pavel
2020-12-03 11:19:15 +02:00
parent 4dd14217a9
commit 9ca8b2fcc7
79 changed files with 3141 additions and 2288 deletions

View File

@@ -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"