#!/bin/bash # Клиент (компьютер ученика) стучится на этот скрипт через веб-сервер # и тем самым заставляет доску (сервер) соединиться с его компьютером set -e set -f set -u # mktemp(1) does not respect umask # https://bugzilla.altlinux.org/show_bug.cgi?id=42550 # $1: directory in which file will be created # Returns path to file without creating it # (theoretically vulnerabile to races) _mktemp(){ local rand while true do rand="$(set -eo pipefail && head -c 55 /dev/urandom | base64 | grep -o '[[:alnum:]]' | head -c 20 | tr -d '\n')" if ! test -f "$1"/"$rand" ; then echo "$1"/"$rand" break fi done } # $1: directory _main_trigger_connect(){ echo "$REMOTE_ADDR" > "$(_mktemp "$dir")" } # $1: HTTP_STATUS_CODE # $2: HTTP_STATUS_DESCRIPTION # $3: text of responce _response_text(){ if [ -z "$*" ]; then echo_err "Empty args of html_reposnse" exit 1 fi echo "Status: $1 $2" #echo "Access-Control-Allow-Origin: *" echo "Content-Type: text/plain; charset=utf-8" echo -e "\n$3" } if [ "${SOURCED:-0}" != 1 ]; then readonly dir='/var/spool/doskast' _main_trigger_connect "$dir" _response_text 200 OK OK fi