#!/bin/sh # shellcheck disable=SC2119,SC2120 # shellcheck source=../lib/load-configuration . "${0%/*}/../lib/load-configuration" if [ "x${SSH_ORIGINAL_COMMAND%% *}" = 'xget-assignment' ] || \ [ "x${SSH_ORIGINAL_COMMAND%% *}" = 'xreturn-assignment' ] || \ [ "x${SSH_ORIGINAL_COMMAND%% *}" = 'xping-from-slave' ]; then # small check to prevent some shell-injections if printf '%s\n' "${SSH_ORIGINAL_COMMAND}" | \ grep -q '[^-a-zA-Z0-9.+_ ]'; then >&2 printf 'Invalid command: "%s".\n' "${SSH_ORIGINAL_COMMAND}" exit 42 fi # shellcheck disable=SC2016 infos=$( { printf 'SELECT' printf ' `build_slaves`.`id`,' printf ' `persons`.`name`' printf ' FROM `build_slaves`' mysql_join_build_slaves_ssh_keys mysql_join_ssh_keys_persons printf ' WHERE `build_slaves`.`name`=from_base64("%s")' \ "$( printf '%s' "$1" | \ base64 -w0 )" printf ' AND `build_slaves`.`access_allowed`;\n' } | \ mysql_run_query | \ tr '\t' ' ' ) if [ -z "${infos}" ]; then >&2 printf 'Build slave "%s" is unnknown to the database.\n' "$1" exit 42 fi slave_id="${infos%% *}" operator="${infos#* }" ssh_log_id=$( # shellcheck disable=SC2016 { printf 'INSERT INTO `ssh_log` (`build_slave`,`action`,`parameters`)' printf ' VALUES (%s' \ "${slave_id}" printf ',from_base64("%s")' \ "$( printf '%s' "${SSH_ORIGINAL_COMMAND%% *}" | \ base64 -w0 )" \ "$( printf '%s' "${SSH_ORIGINAL_COMMAND#* }" | \ base64 -w0 )" printf ');\n' printf 'SELECT LAST_INSERT_ID();\n' } | \ mysql_run_query 'unimportant' ) exit_code=0 slave="$1" slave_id="${slave_id}" operator="${operator}" SKIP_COMMAND_LOG=1 /bin/sh -c "${base_dir}/bin/${SSH_ORIGINAL_COMMAND}" \ || exit_code=$? if [ -n "${ssh_log_id}" ]; then # shellcheck disable=SC2016 { printf 'UPDATE `ssh_log`' printf ' SET `ssh_log`.`duration`=TIME_TO_SEC(TIMEDIFF(NOW(),`ssh_log`.`date`)),' printf '`ssh_log`.`exit_code`=%s' \ "${exit_code}" printf ' WHERE `ssh_log`.`id`=%s' \ "${ssh_log_id}" printf ';\n' } | \ mysql_run_query 'unimportant' fi exit ${exit_code} else >&2 printf 'Invalid command: "%s".\n' "${SSH_ORIGINAL_COMMAND}" exit 42 fi