initial commit
This commit is contained in:
parent
0739ec552b
commit
aa30a9cf19
15
README.md
15
README.md
|
@ -1,2 +1,15 @@
|
||||||
# bash-bbs-loader
|
# bash-bbs-loader
|
||||||
Bash script that uses xinetd to load a dos bbs on linux
|
|
||||||
|
Bash script that uses xinetd and telnetd to load a dos bbs on linux
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
Debian based/deb based distribution (for now)
|
||||||
|
telnetd and xinetd
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
Run the setup_xinetd script
|
||||||
|
Modify the variables in the bbs script
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# #
|
||||||
|
# script to load renegade under dosemu #
|
||||||
|
# finds open node and executes bbs #
|
||||||
|
# todo : recognize and handle hangup #
|
||||||
|
# #
|
||||||
|
########################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export HOME=/home/bbs/
|
||||||
|
export TERM=xterm
|
||||||
|
export LANG=en_US.utf8
|
||||||
|
pressed_escape=0
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
SCRIPT_BASENAME=$(basename $SCRIPT_NAME)
|
||||||
|
HOSTNAME=$REMOTEHOST
|
||||||
|
PID=$$
|
||||||
|
|
||||||
|
LOG=/home/bbs/REN/LOGS/connect.$(date "+%W.%u")
|
||||||
|
BBS_NAME="godta"
|
||||||
|
SOFTWARE="Renegade v05.26.0/DOS (Compiled June 2, 2013) ..."
|
||||||
|
MAINT=false
|
||||||
|
total=9
|
||||||
|
TEMP_BASE="/tmp/node."
|
||||||
|
TEMP_DIR=$(dirname $TEMP_BASE)
|
||||||
|
DISPLAY_ANSI=0
|
||||||
|
ANSI_HEAD=""
|
||||||
|
ANSI_MIDDLE=""
|
||||||
|
ANSI_FOOTER=""
|
||||||
|
WILL_BE_BACK="" # Will be back message during maintenance, date is probably a good idea.
|
||||||
|
PAUSE_STRING=".oO Pause Oo."
|
||||||
|
BBS_COMMAND="/usr/bin/dosemu.bin -t -f /home/bbs/scripts/config/bbs.conf D:\SCRIPTS\BAT\BBS.BAT $NODE $IP"
|
||||||
|
|
||||||
|
current_sessions=$(ls $TEMP_BASE* 2> /dev/null|wc -l)
|
||||||
|
UPTIME=$(uptime -p|sed s/up//)
|
||||||
|
|
||||||
|
function message()
|
||||||
|
{
|
||||||
|
[[ -n $1 ]] && echo -ne "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_xinetd()
|
||||||
|
{
|
||||||
|
if [ $(whoami) != "root" ] ; then
|
||||||
|
message "\nRe-run this script as root\n\n"
|
||||||
|
message "sudo $(realpath -s $0) [port] [user]\n\n"
|
||||||
|
message "Where \n [port] is the port you want telnet to listen on and \n [user] is the user that will run telnetd\n\n"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
RELEASE_ID=$(awk -F= '$1=="ID" { print $2 ;}' /etc/os-release)
|
||||||
|
RELEASE_NAME=$(awk -F= '$1=="NAME" { print $2 ;}' /etc/os-release)
|
||||||
|
else
|
||||||
|
message "Sorry, it looks like your os is not supported\n"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $RELEASE_ID != "ubuntu" ] || [ $RELEASE_ID != "debian" ]; then
|
||||||
|
message "$RELEASE_NAME is currently not supported at this time\n"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
apt-get install xinetd telnetd -y
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
message "$0 takes exactly 2 arguments - \n"
|
||||||
|
message "$0 [port] [user] \n"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_PATH=$(realpath -P .)
|
||||||
|
SCRIPT_REPLACEMENT=$(realpath -P $0)
|
||||||
|
|
||||||
|
PORT=$1
|
||||||
|
USER=$2
|
||||||
|
cp "$CURRENT_PATH/telnet.dist" "$CURRENT_PATH/telnet"
|
||||||
|
|
||||||
|
sed -i s:__SCRIPT_NAME__:$SCRIPT_REPLACEMENT: "$CURRENT_PATH/telnet"
|
||||||
|
sed -i s:__PORT__:$PORT: "$CURRENT_PATH/telnet"
|
||||||
|
sed -i s:__USER__:$USER: "$CURRENT_PATH/telnet"
|
||||||
|
|
||||||
|
cp $SCRIPT_REPLACEMENT /etc/xinet.d/telnet
|
||||||
|
systemctl restart xinetd
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $SCRIPT_BASENAME == "setup_xinetd" ] ; then
|
||||||
|
setup_xinetd $1 $2
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
function pause()
|
||||||
|
{
|
||||||
|
if [ ! -n $1 ]; then
|
||||||
|
PAUSE_STRING=$1
|
||||||
|
fi
|
||||||
|
echo -ne "$PAUSE_STRING" && read -N1 -s
|
||||||
|
echo -e "[1K[1F"
|
||||||
|
# could also be read -N1 -s -p $PAUSE_STRING
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_ip()
|
||||||
|
{
|
||||||
|
local ip=$1
|
||||||
|
local is_ip=0;
|
||||||
|
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||||
|
is_ip=1
|
||||||
|
fi
|
||||||
|
return $is_ip
|
||||||
|
}
|
||||||
|
|
||||||
|
function readEscape() {
|
||||||
|
read -N2 -r -s -p " Press [ESC] twice to continue ..." ESCAPE
|
||||||
|
|
||||||
|
if [ "$ESCAPE" == "" ]
|
||||||
|
then
|
||||||
|
pressed_escape=1
|
||||||
|
else
|
||||||
|
echo -e "[1K[1F"
|
||||||
|
pressed_escape=0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function log() {
|
||||||
|
|
||||||
|
LOG=/home/bbs/REN/LOGS/conn$(date +%j).log
|
||||||
|
SYSOP_LOG=/home/bbs/REN/LOGS/sysop.log
|
||||||
|
|
||||||
|
MESSAGE=$1
|
||||||
|
|
||||||
|
DATE=$(date "+%x")
|
||||||
|
TIME=$(date "+%I:%M.%S%P")
|
||||||
|
|
||||||
|
echo -e "\n|03[|11$NODE|03]|15:|03[|11$DATE|03]|15:|03[|11$TIME|03]|15: |07$MESSAGE\n" >> $SYSOP_LOG
|
||||||
|
echo "[$NODE]:[$DATE]:[$TIME]: $MESSAGE" >> $LOG
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function message()
|
||||||
|
{
|
||||||
|
[[ -n $1 ]] && echo -ne "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $MAINT == true ] ; then
|
||||||
|
message "\n\nConnection from $HOSTNAME ...\n";
|
||||||
|
message "Sorry $BBS_NAME is under maintenance. Please call back later.\n";
|
||||||
|
|
||||||
|
[[ -n $WILL_BE_BACK ]] && echo -e "$WILL_BE_BACK"
|
||||||
|
|
||||||
|
exit;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [ $current_sessions -eq $total ]; then
|
||||||
|
log "---"
|
||||||
|
log "Connection from $HOSTNAME"
|
||||||
|
log "Connection refused : To many connections"
|
||||||
|
message "[2J"
|
||||||
|
message "\n Too many connections, please try again later. \n"
|
||||||
|
sleep 2
|
||||||
|
message " Goodbye."
|
||||||
|
|
||||||
|
log "Disconnected : $HOSTNAME"
|
||||||
|
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
|
||||||
|
NODE=1
|
||||||
|
for i in `seq 1 $total` ; do
|
||||||
|
if [ ! -f "$TEMP_BASE$i" ]
|
||||||
|
then
|
||||||
|
log "---"
|
||||||
|
log "Connection to from $HOSTNAME"
|
||||||
|
let NODE=$i
|
||||||
|
echo $PID > $TEMP_BASE$i
|
||||||
|
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
trap "rm -rf $TEMP_BASE$NODE; exit" SIGHUP SIGINT SIGQUIT SIGABRT SIGURG SIGPIPE SIGQUIT SIGKILL SIGTERM
|
||||||
|
|
||||||
|
if [[ $DISPLAY_ANSI -eq 1 ]];
|
||||||
|
then
|
||||||
|
log "Displaying intro ansi"
|
||||||
|
clear
|
||||||
|
[[ -n $ANSI_HEAD ]] && cat $ANSI_HEAD
|
||||||
|
[[ -n $ANSI_MIDDLE ]] && cat $ANSI_MIDDLE
|
||||||
|
[[ -n $ANSI_FOOTER ]] && cat $ANSI_FOOTER
|
||||||
|
pause
|
||||||
|
fi
|
||||||
|
|
||||||
|
message "[2J"
|
||||||
|
message "\n connected to $BBS_NAME on node $NODE of $total\n"
|
||||||
|
message " from host name $HOSTNAME ... \n"
|
||||||
|
sleep 1
|
||||||
|
message " resolving hostname ... "
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
is_ip $HOSTNAME
|
||||||
|
if [[ $? -eq 1 ]]; then
|
||||||
|
IP=$HOSTNAME
|
||||||
|
else
|
||||||
|
IP=$(host -4 $HOSTNAME|awk '/has.*address/{print $NF; exit;}')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $IP ] ;
|
||||||
|
then
|
||||||
|
IP="169.254.0.$NODE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
message " using IP ... $IP\n"
|
||||||
|
message " logged on `date '+%A %B %d, %Y %I:%M %P'`\n"
|
||||||
|
message " $BBS_NAME has been up continually for $UPTIME\n\n"
|
||||||
|
message " welcome.\n\n"
|
||||||
|
|
||||||
|
while [ $pressed_escape -ne 1 ]
|
||||||
|
do
|
||||||
|
readEscape
|
||||||
|
done
|
||||||
|
|
||||||
|
message "\n\n Loading $SOFTWARE \n\n"
|
||||||
|
message " "
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
log "Loading bbs ... "
|
||||||
|
|
||||||
|
$BBS_COMMAND
|
||||||
|
|
||||||
|
message "\n node $NODE disconnected ...\n\n"
|
||||||
|
|
||||||
|
log "Disconnected from $HOSTNAME"
|
||||||
|
rm -rf $TEMP_BASE$NODE
|
||||||
|
|
||||||
|
log "Removed $TEMP_BASE$NODE"
|
||||||
|
log "Node waiting ..."
|
||||||
|
|
||||||
|
exit
|
||||||
|
|
||||||
|
fi
|
|
@ -0,0 +1 @@
|
||||||
|
bbs
|
|
@ -0,0 +1,15 @@
|
||||||
|
service login
|
||||||
|
{
|
||||||
|
flags = NODELAY KEEPALIVE IPv4
|
||||||
|
bind = 0.0.0.0
|
||||||
|
disable = no
|
||||||
|
type = UNLISTED
|
||||||
|
port = __PORT__
|
||||||
|
socket_type = stream
|
||||||
|
protocol = tcp
|
||||||
|
wait = no
|
||||||
|
user = __USER__
|
||||||
|
server = /usr/sbin/in.telnetd
|
||||||
|
server_args = -h -L __SCRIPT_NAME__
|
||||||
|
log_on_failure += USERID
|
||||||
|
}
|
Loading…
Reference in New Issue