blob: c4eac4589410877211ffa3f5c2017b8ce9a7cc7b [file] [log] [blame]
#!/bin/bash
# This script uses some bash specific constructs like arrays.
getOpenPort()
{
openPorts="`netstat -an | sed -n 's/^[^\.]*[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+.\([0-9]\+\)[ \t]\+.*\(LISTEN\|ESTABLISH\).*$/\1/p' | sort -n | uniq`"
declare -a ports
for port in ${openPorts}; do
ports[${port}]=1
done
found=false
while [ "${found}" = "false" ]; do
newPort="`expr ${RANDOM} % 10000 + 20000`"
if [ "${ports[${newPort}]}" != "1" ]; then
found=true
fi
done
unset ports
echo ${newPort}
}
getOption()
{
OPTNAME=
OPTVAL=
case "$1" in
--*)
OPTNAME="`echo "$1" | sed 's/^--//;s/=.*$//'`"
OPTVAL="`echo "$1" | cut -d '=' -f 2-2`"
;;
esac
}
getIPAddress()
{
ipAddrs="`ipconfig 2>/dev/null | sed 's/\\r//g' | awk '/IP Address/ { print $NF }'`"
for ipAddr in ${ipAddrs}; do
hostName="`nslookup ${ipAddr} 2>/dev/null | sed 's/\\r//g' | awk '/^Name:/{print $2}'`"
if [ -n "${hostName}" ]; then
echo ${ipAddr}
break
fi
done
}
getHostName()
{
ipAddr="`getIPAddress`"
if [ -n "${ipAddr}" ]; then
nslookup ${ipAddr} 2>/dev/null | sed 's/\\r//g' | awk '/^Name:/{print $2}'
fi
}
getHost()
{
HNAME=
HGROUP=
case "$1" in
*:*)
HNAME="`echo "$1" | cut -d ':' -f 2-2`"
HGROUP="`echo "$1" | cut -d ':' -f 1-1`"
;;
*)
HNAME="$1"
;;
esac
}
readPassword()
{
PASSWD=
echo -n "Please enter the password: "
stty -echo
read PASSWD
stty echo
echo
}
getHostType()
{
plink -pw "${PASSWD}" "${USER}@$1" "uname"
}
addList()
{
if [ -z "$1" ]; then
echo "$2"
else
echo "$1,$2"
fi
}
searchArray()
{
arraySize="`eval echo \\${#$1[@]}`"
arrayIndex=1
while [ "${arrayIndex}" -le "${arraySize}" ]; do
if [ "`eval echo \\${$1[${arrayIndex}]}`" = "$2" ]; then
echo ${arrayIndex}
return
fi
((arrayIndex++))
done
echo 0
}
writeBBConfigKeyVal()
{
if [ -n "$1" -a -n "$2" ]; then
"${CSBBDIR}/FwkBBClient" set CONFIG "$1" "$2"
fi
}
declare -a hostNames
declare -a hostGroups
parseHosts()
{
argNum="$1"
((argNum++))
numHosts=0
numGroups=0
HOSTS=
while true; do
getHost "`eval echo \\${${argNum}}`"
if [ -z "${HNAME}" ]; then
break
fi
if [ "${HGROUP}" = "*" ]; then
echo "Cannot use '*' as the hostGroup." && echo && showUsage && exit 1
fi
if echo ${HNAME} | fgrep . >/dev/null; then
hostName="${HNAME}"
else
hostName="`nslookup ${HNAME} 2>/dev/null | sed 's/\\r//g' | awk '/^Name:/{print $2}'`"
fi
hostIndex="`searchArray hostNames "${hostName}"`"
if [ -z "${HGROUP}" ]; then
HOSTS="${HOSTS} ${hostName}"
else
HOSTS="${HOSTS} ${HGROUP}:${hostName}"
fi
if [ "${hostIndex}" -le 0 ]; then
((numHosts++))
hostNames[${numHosts}]="${hostName}"
fi
groupIndex="`searchArray hostGroups "${HGROUP}"`"
if [ "${groupIndex}" -le 0 ]; then
((numGroups++))
hostGroups[${numGroups}]="${HGROUP}"
fi
((argNum++))
done
}
writePasswordsToBB()
{
hostIndex=1
numHosts="${#hostNames[@]}"
readPassword
while [ "${hostIndex}" -le "${numHosts}" ]; do
hostName="${hostNames[${hostIndex}]}"
maxTries=3
echo -n "Checking password on ${hostName}. "
hostType="`getHostType "${hostName}"`"
if [ -n "${hostType}" ]; then
echo
else
while [ "${maxTries}" -gt 0 ]; do
readPassword
hostType="`getHostType "${hostName}"`"
if [ -n "${hostType}" ]; then
break
fi
echo "Incorrect password for server ${hostName}."
((maxTries--))
done
fi
if [ -n "${hostType}" ]; then
writeBBConfigKeyVal "host.${hostName}" "${PASSWD}"
if [ "`echo ${hostType} | tr "cyglinsu" "CYGLINSU" | cut -b1-3`" = "CYG" ]; then
hostIsWindows="true"
else
hostIsWindows="false"
fi
writeBBConfigKeyVal "hostType.${hostName}" "${hostIsWindows}"
else
echo "Failed to login to server ${hostName}; removing from hosts list"
fi
((hostIndex++))
done
}
checkLogin()
{
hostIndex=1
numHosts="${#hostNames[@]}"
while [ "${hostIndex}" -le "${numHosts}" ]; do
hostName="${hostNames[${hostIndex}]}"
echo -n "Checking login on ${hostName}. "
hostType="`ssh -o StrictHostKeyChecking=no "${USER}@${hostName}" "uname"`"
if [ -n "${hostType}" ]; then
if [ "`echo ${hostType} | tr "cyglinsu" "CYGLINSU" | cut -b1-3`" = "CYG" ]; then
hostIsWindows="true"
else
hostIsWindows="false"
fi
writeBBConfigKeyVal "hostType.${hostName}" "${hostIsWindows}"
else
echo "Failed to login to server ${hostName}"
fi
((hostIndex++))
done
}