kivaari icon

Server.sh Aufgabe 2

kivaari | PRO | 12/06/16 12:07:01 PM UTC | 0 ⭐ | 302 👁️ | Never ⏰ | []
Bash |

4.07 KB

|

None

|

0 👍

/

0 👎

#!/bin/bash
 
rm -f variables.txt
echo -e "0\n0\n0\n0" > variables.txt
test -e users.txt || touch users.txt
test -p pipe || mkfifo pipe
 
port=1337
 
function setuser() {
    if [[ $(grep -En "^[^\:]*$1" users.txt) ]]; then
        echo "User already exists"
                sed -i "1s/.*/0/" variables.txt #status=0
                sed -i "2s/.*/0/" variables.txt #registerstatus=0
    else
        echo -n $1 >> users.txt
                echo -n ":" >> users.txt
                sed -i "2s/.*/1/" variables.txt #registerstatus=1
    fi
}
 
function setpassword() {
    hashedpw=$1
    n=$2
    echo -n $n >> users.txt
    echo -n ":" >> users.txt
    echo -n $hashedpw >> users.txt
    echo -n ":" >> users.txt
    echo "0" >> users.txt
}
 
function checkuser() {
    # check if user exists
    # send c in this function
    if [[ $(grep -En "^[^\:]*$1" users.txt) ]]; then
        LINE=$(grep -En "^[^\:]*$1" users.txt | cut -d ':' -f 1)
        N=$(grep -En "^[^\:]*$1" users.txt | cut -d ':' -f 3)
        sed -i "4s/.*/$LINE/" variables.txt
        sed -i "3s/.*/1/" variables.txt #loginstatus=1
        T=$(grep -En "^[^\:]*$1" users.txt | cut -d ':' -f 5)
        T=$(expr $T + 1)
        sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
        sed -i -e "${LINE}s/$/:$T/" users.txt
        if [[ "$T" == "$N" ]]; then
            echo "USERACCEPTED $T no"
            sed -i "3s/.*/3/" variables.txt #loginstatus=3
        else
            echo "USERACCEPTED $T yes"
        fi
    else
        echo "User does not exist"
        sed -i "1s/.*/0/" variables.txt #status=0
                sed -i "3s/.*/0/" variables.txt #loginstatus=0
    fi
}
 
function checkpassword() {
    # checks if pw matches for given user
    newpw=$1
    passwd=$(echo $1 | shasum | cut -d ' ' -f 1)
    pwline=$(sed -n 4p variables.txt)
    realpw=$(sed -n ${pwline}p users.txt | cut -d ':' -f 3)
    if [[ "$passwd" == "$realpw" ]]; then
        sed -i "3s/.*/2/" variables.txt #loginstatus=2
        OLDT=$(sed -n ${pwline}p users.txt | cut -d ':' -f 4)
                sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
        sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
                sed -i -e "${LINE}s/$/:$newpw/" users.txt
        sed -i -e "${LINE}s/$/:$OLDT/" users.txt
        echo "PASSWORDACCEPTED yes"
    else
         sed -i "3s/.*/0/" variables.txt #loginstatus=0
         sed -i "1s/.*/0/" variables.txt #status=0
        echo "Wrong password!"
    fi
}
 
function test() {
    read input
    status=$(sed -n 1p variables.txt)
    registerstatus=$(sed -n 2p variables.txt)
    loginstatus=$(sed -n 3p variables.txt)
    if [[ "$status" == "0" ]]; then
        if [[ "$input" == "REGISTER" ]]; then
            sed -i "1s/.*/1/" variables.txt
        elif [[ "$input" == "LOGIN" ]]; then
            sed -i "1s/.*/2/" variables.txt
        else
            sed -i "1s/.*/0/" variables.txt
        fi
    elif [[ "$status" == "1" ]]; then
        if [[ "$registerstatus" == "0" ]]; then
            setuser $input
        elif [[ "$registerstatus" == "1" ]]; then
            setpassword $input
            sed -i "1s/.*/0/" variables.txt #status=0
            sed -i "2s/.*/0/" variables.txt #registerstatus=0
        else
            echo "impossible register else case"
        fi
    elif [[ "$status" == "2" ]]; then
        if [[ "$loginstatus" == "0" ]]; then
            checkuser $input
        elif [[ "$loginstatus" == "1" ]]; then
            checkpassword $input
        elif [[ "$loginstatus" == "2" ]]; then
            if [ ! -f $input ]; then
                    echo "File not found!"
            else
                echo $(cat $input)
            fi
            sed -i "1s/.*/0/" variables.txt #status=0
            sed -i "3s/.*/0/" variables.txt #loginstatus=0
        elif [[ "$loginstatus" == "3" ]]; then
            N=$(echo $input | cut -d ' ' -f 2)
            NEWPW=$(echo $input | cut -d ' ' -f 1)
            LINE=$(sed -n 4p variables.txt)
            sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
                    sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
            sed -i -e "${LINE}s/\:[^\:]*$//" users.txt
            sed -i -e "${LINE}s/$/:$N/" users.txt
                    sed -i -e "${LINE}s/$/:$NEWPW/" users.txt
                    sed -i -e "${LINE}s/$/:0/" users.txt
            sed -i "1s/.*/0/" variables.txt #status=0
                        sed -i "3s/.*/0/" variables.txt #loginstatus=0
        else
            echo "impossible login else case"
        fi
    else
        echo "impossible status else case"
    fi
}
 
while true;
do
    nc -l -p $port < pipe | test | cat > pipe;
done

Comments