#!/bin/bash
ALLPORTS="65520,65521,5432,50000"
DEFLHOST="127.0.0.1"
CFGFILE=/etc/opt/sshbuk/sshbuk.vars

kill_port() {
	kp_ports=$1
	for sig in 15 9; do
		kp_is=$(ps ax | grep ssh | grep "\-L" | grep "$kp_ports" | head -n1)
		if [ -z "$kp_is" ]; then
			break
		fi
		for pid in $(ps ax | grep ssh | grep "\-L" | grep "$kp_ports" | awk '{print $1}'); do
			fn_to_log "$(date +%H:%M:%S) kill -15 $pid"
			kill -$sig $pid
		done
	done
	kp_is=$(ps ax | grep ssh | grep "\-L" | grep "$kp_ports" | head -n1)
	if [ ! -z "$kp_is" ]; then
		MSG="Тунель $kp_ports не закрыт: $kp_is"
		echo $MSG >& 2
		fn_to_log "$(date +%H:%M:%S) $MSG"
	fi
}

if [ -f $CFGFILE ]; then
    . $CFGFILE
else
    echo "Не найден файл \"$CFGFILE\"" >& 2
    exit -1
fi

if [ -f $BINDIR/sshbuk.fn ]; then
    . $BINDIR/sshbuk.fn
else
    echo "Не найден файл \"sshbuk.fn\"" >& 2
    exit -1
fi

fn_make_log $LOGDIR
fn_to_log ""
fn_to_log "$(date +%H:%M:%S) $(basename $0) \"$@\""

lhost=$DEFLHOST
cml_i=$#    # число параметров в командной строке
while [ $cml_i -ge "0" ]
do
	cml_is="no" # cml_is задает наличие/отсутствие параметра у ключа
	case $1 in
	-a|-azs)    # номер АЗС
    	cml_is="yes"
		cml_azs=$2
		;;
	-h)
    	cml_is="yes"
		lhost=$2
		;;
	-p)
    	cml_is="yes"
		cml_ports=$2
		;;
	-off)
		cml_off="yes"
		;;
	esac
	shift
	if [ $cml_is == "yes" ]; then
		shift
		cml_i=$(expr $cml_i - 2)
	else
		cml_i=$(expr $cml_i - 1)
	fi
done

if [ -z "$cml_ports" ]; then
	MSG="Не задан порт"
    echo $MSG >& 2
    fn_to_log "$(date +%H:%M:%S) $MSG"
	exit -1
fi

if [ "$cml_ports" == "all" ]; then
	cml_ports=$ALLPORTS
fi

if [ ! -z "$cml_off" ]; then
	for port in $(echo $cml_ports | sed -e "s/,/ /g"); do
		kill_port "$port:$lhost:$port"
	done
	exit 0
fi

if [ -z "$cml_azs"  ]; then
	MSG="Не задан номер АЗС"
    echo $MSG >& 2
    fn_to_log "$(date +%H:%M:%S) $MSG"
	exit -1
fi

for port in $(echo $cml_ports | sed -e "s/,/ /g"); do
	kill_port "$port:$lhost:$port"
	sshbuk -a $cml_azs -- -f -N -L "$port:$lhost:$port" >> $log_file_name 2>>$log_file_name
	ERR=$?
	fn_to_log "$(date +%H:%M:%S) sshbuk($port:$lhost:$port)=$ERR"
done
exit 0
