69 lines
1.7 KiB
Bash
69 lines
1.7 KiB
Bash
#!/bin/bash
|
|
set -Eeuo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
PLUGIN_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
SETTINGS_FILE="$PLUGIN_DIR/plugin-settings.conf"
|
|
LOG_FILE="${DA_ALT_MYSQL_DB_HOOK_LOG:-$PLUGIN_DIR/data/logs/da-db-hooks.log}"
|
|
HOOK_NAME="${DA_HOOK_NAME:-$(basename "$0")}"
|
|
|
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
|
|
read_plugin_setting() {
|
|
local key="$1"
|
|
local default="$2"
|
|
local line value
|
|
[ -r "$SETTINGS_FILE" ] || {
|
|
printf '%s\n' "$default"
|
|
return 0
|
|
}
|
|
line="$(grep -E "^${key}=" "$SETTINGS_FILE" | tail -n 1 || true)"
|
|
[ -n "$line" ] || {
|
|
printf '%s\n' "$default"
|
|
return 0
|
|
}
|
|
value="${line#*=}"
|
|
value="${value%%#*}"
|
|
value="${value%\"}"
|
|
value="${value#\"}"
|
|
value="${value%\'}"
|
|
value="${value#\'}"
|
|
value="$(printf '%s' "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
|
|
printf '%s\n' "${value:-$default}"
|
|
}
|
|
|
|
log() {
|
|
printf '[%s] hook=%s username=%s database=%s user=%s %s\n' \
|
|
"$(date '+%Y-%m-%d %H:%M:%S')" \
|
|
"$HOOK_NAME" \
|
|
"${username:-}" \
|
|
"${database:-${name:-}}" \
|
|
"${user:-}" \
|
|
"$*" >> "$LOG_FILE"
|
|
}
|
|
|
|
enabled="$(read_plugin_setting DA_ALT_MYSQL_BLOCK_NATIVE_DB_HOOKS true)"
|
|
case "$enabled" in
|
|
true|yes|on|1) ;;
|
|
*) log "native DB hook blocker disabled"; exit 0 ;;
|
|
esac
|
|
|
|
if [ "${DA_ALT_MYSQL_ALLOW_NATIVE_DB_ACTION:-0}" = "1" ]; then
|
|
log "native DB action explicitly allowed by environment"
|
|
exit 0
|
|
fi
|
|
|
|
case "$HOOK_NAME" in
|
|
*_post.sh|*_post)
|
|
log "native DirectAdmin database action observed after completion"
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
log "blocked native DirectAdmin database action"
|
|
cat >&2 <<'EOF'
|
|
Databases on this server are managed by the MySQL plugin and the alt-mariadb instance.
|
|
Use the MySQL plugin instead of DirectAdmin native database actions.
|
|
EOF
|
|
exit 1
|