#!/bin/bash
# dynpasswd - Dynamic Password for CGS ID
SHADOW_DIR="./shadow/"
SSID_GEN_URL="http://127.0.0.1:8080/mis/info/menu_info.asp?type=%D1%A7%C9%FA%CD%F8%D2%B3"
AUTH_URL="http://127.0.0.1:8080/mis/info/list.asp"
PWD_URL="http://127.0.0.1:8080/mis/info/pub_info/set_pass.asp"
SSID_FILENAME="./.ssid.cookie"
UPDATE_INT=60
function deamon {
echo "[$(date)] dynpasswd-deamon started"
while true
do
for update in $(ls $SHADOW_DIR)
do
[[ $(auth $update) == "true" ]] && echo -n "[$(date)] $update: successfly auth... " && update_passwd $(randpw) $update
[[ $(auth $update) == "false" ]] && rm $SHADOW_DIR$update && echo "[$(date)] Failed to auth $update. Remove shadow $update"
done
sleep $UPDATE_INT
done
}
function randpw {
RAND_PW=$RANDOM$RANDOM
LEN=${#RAND_PW}
RAND_PW=${RAND_PW:$((LEN - 6))}
echo $RAND_PW
}
function update_ssid {
echo -n "[$(date)] Updateing ssid... "
curl -c $SSID_FILENAME $SSID_GEN_URL > /dev/null 2> /dev/null
[[ $? == "0" ]] && echo "OK"
[[ $? != "0" ]] && echo "Failed!" && exit 1
}
function auth {
[[ -z $1 ]] && return 1
[[ ! -e $SSID_FILENAME ]] && return 1
passwd=$(cat $SHADOW_DIR$1)
[[ ! -z $(curl -b $SSID_FILENAME --data "tbarno=$1&passwd=$passwd&hd=002" $AUTH_URL 2> /dev/null | iconv -f gbk -t utf-8 | grep 个人资料) ]] && echo "true" && return 0
echo "false" && return 1
}
function update_passwd {
[[ ! -z $(curl -b .ssid.cookie --data "hd=002&T1=$1&T2=$1" $PWD_URL 2> /dev/null | iconv -f gbk -t utf-8 | grep OK) ]] && echo "Updated: $1"&& echo $1 > $SHADOW_DIR$2 && return 0
echo "ERROR" && return 1
}
function usage {
echo "Usage: dynpasswd --add|-a <new id> <password>
dynpasswd --remove|-r <id>
dynpasswd --deamon|-d"
exit
}
function main {
[[ -z $* ]] && usage
case $1 in
-a|--add)
[[ -z $3 ]] && usage
echo $3 > $SHADOW_DIR$2
;;
-r|--remove)
[[ -z $2 ]] && usage
rm $SHADOW_DIR$2
;;
-d|--deamon)
update_ssid
deamon
;;
*)
usage
;;
esac
}
main $*
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}