diff --git a/README.md b/README.md index 8230e35..2973614 100644 --- a/README.md +++ b/README.md @@ -8,4 +8,5 @@ ### Contents -* [Assignment 1: Firewall Rules](./firewall-rules) \ No newline at end of file +* [Assignment 1: Firewall Rules](./firewall-rules) +* [Assignment 2: Firewall Server](./firewall-server) \ No newline at end of file diff --git a/firewall-server/Makefile b/firewall-server/Makefile new file mode 100644 index 0000000..33ed419 --- /dev/null +++ b/firewall-server/Makefile @@ -0,0 +1,21 @@ +CFLAGS = -Wall -Werror -g -fdiagnostics-color=always + +.PHONY: all clean + +all: server client + +server: server.o + $(CC) $(CFLAGS) -o server server.o -lpthread + +server.o: server.c + $(CC) $(CFLAGS) -c server.c + + +client: client.o + $(CC) $(CFLAGS) -o client client.o + +client.o: client.c + $(CC) $(CFLAGS) -c client.c + +clean: + rm -f *.o server client diff --git a/firewall-server/README.md b/firewall-server/README.md new file mode 100644 index 0000000..cfd7441 --- /dev/null +++ b/firewall-server/README.md @@ -0,0 +1,8 @@ +# Firewall Server + +*Create a simple server for operating on firewall rules* + +--- + +* [Problem statement](./ex2.pdf) +* Formative diff --git a/firewall-server/client.c b/firewall-server/client.c new file mode 100644 index 0000000..15d320c --- /dev/null +++ b/firewall-server/client.c @@ -0,0 +1,6 @@ +#include + +int main (int argc, char **argv) { + // Client to be written + return 0; +} diff --git a/firewall-server/ex2.pdf b/firewall-server/ex2.pdf new file mode 100644 index 0000000..870db22 Binary files /dev/null and b/firewall-server/ex2.pdf differ diff --git a/firewall-server/server.c b/firewall-server/server.c new file mode 100644 index 0000000..2765a54 --- /dev/null +++ b/firewall-server/server.c @@ -0,0 +1,6 @@ +#include + +int main (int argc, char **argv) { + // Server to be written + return 0; +} diff --git a/firewall-server/test.sh b/firewall-server/test.sh new file mode 100644 index 0000000..0db593f --- /dev/null +++ b/firewall-server/test.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +#globals +ret=0 +server="server" +client="client" +serverOut=testServerOutput.txt +clientOut=testClientOutput.txt +successFile=testSuccess.txt +IPADDRESS=localhost +PORT=2200 + +# --- helper function --- +function run(){ + echo -e "$1:" + $1 #execute + #check errors + tmp=$? + if [ $tmp -ne 0 ]; then + ret=$tmp + fi + echo "" #newline + return $tmp +} + +function checkConnection() { + sleep 0.1 + case `netstat -a -n -p 2>/dev/null| grep $PORT ` in + *":::2200"*) + return 1;; + esac + sleep 0.2 + case `netstat -a -n -p 2>/dev/null| grep $PORT` in + *":::2200"*) + return 1;; + esac + sleep 0.2 + case `netstat -a -n -p 2>/dev/null| grep $PORT` in + *":::2200"*) + return 1;; + esac + sleep 0.2 + case `netstat -a -n -p 2>/dev/null| grep $PORT` in + *":::2200"*) + return 1;; + esac + sleep 0.2 + case `netstat -a -n -p 2>/dev/null| grep $PORT` in + *":::2200"*) + return 1;; + esac + return 0 +} + +# --- TESTCASES --- +function basic_testcase(){ + t="testcase 1" + + #cleanup + rm -f $serverOut + rm -f $clientOut + rm -f $successFile + echo "Rule added" > $successFile + killall $server > /dev/null 2> /dev/null + + # start server + echo -en "starting server: \t" + ./$server $PORT > $serverOut 2>&1 & + checkConnection + if [ $? -ne 1 ] + then + echo -e "ERROR: could not start server" + return -1 + else + echo "OK" + fi + + # start client + command="A 147.188.192.41 443" + echo -en "executing client: \t" + ./$client $IPADDRESS $PORT $command > $clientOut 2>/dev/null + if [ $? -ne 0 ] + then + echo -e "Error: Could not execute client" + killall $server > /dev/null 2> /dev/null + return -1 + else + echo "OK" + fi + killall $server > /dev/null 2> /dev/null + if [ ! -r $clientOut ] + then + echo "Error: Client produced no output" + return -1 + fi + + echo -en "server result: \t" + res=`diff $clientOut $successFile 2>&1` + if [ " $res" != " " ] + then + echo "Error: Server returned invalid result" + return -1 + else + echo "OK" + fi + return 0 +} + +# --- execution --- +#reset +rmmod $executable 2>/dev/null + +run basic_testcase +#cleanup +if [ $ret != 0 ] +then + echo Basic test failed +else + echo Basic test succeeded +fi +exit $ret +