-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworker.sh
More file actions
executable file
·112 lines (93 loc) · 1.96 KB
/
worker.sh
File metadata and controls
executable file
·112 lines (93 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/bash
source $2
source "$CONFIG_PATH/$1"
if [ "" != "$3" ] ; then
ss () {
echo $1 | sed -e 's/[\/&]/\\&/g'
}
request () {
if [ ! -r "$1" ] ; then
error 403
fi
FILENAME=$1
HANDLER=cat
CT=$(file -b --mime-type "$FILENAME")
for IND in ${HANDLERS[*]} ; do
if [ "${FILENAME#*.}" == "${IND%:*}" ] ; then
HANDLER=${IND#*:}
CT="text/html"
fi
done
export QUERY_STRING="$query"
echo -e "HTTP/1.1 200 OK\r"
echo -e "Content-Type: $CT\r"
echo -e "\r"
$HANDLER $FILENAME
echo -e "\r"
exit 0
}
filelist () {
REPEAT=$(grep -E '<FILELIST>(.*)<\/FILELIST>' doc/index.htm | sed -r 's/<FILELIST>(.*)<\/FILELIST>/\1/')
FILELIST=$(
cd "$1"
for f in `ls`; do
href="${url%/}/$f"
echo $REPEAT | sed -e "s/FILE_NAME/$(ss "$f")/" -e "s/FILE_HREF/$(ss "$href")/"
done
)
echo -e "HTTP/1.1 200 OK\r"
echo -e "Content-Type: text/html\r"
echo -e "\r"
sed -e "s/DIRNAME/$(ss "$1")/" -e "s/UP_HREF/$(ss "${url%/}/..")/" -e "s/<FILELIST>.*<\/FILELIST>/$(ss "$FILELIST")/" doc/index.htm
echo -e "\r"
exit 0
}
error () {
err=404
if [ -f "doc/$1.htm" ] ; then
err=$1
fi
echo -e "HTTP/1.1 $err\r"
echo -e "Content-Type: text/html\r"
echo -e "\r"
sed -e "s/ERRNO/$err/" doc/$err.htm
echo -e "\r"
exit 0
}
read request
while /bin/true; do
read header
[ "$header" == $'\r' ] && break;
done
url="${request#GET }"
url="${url% HTTP/*}"
query="${url#*\?}"
url="${url%%\?*}"
filename="$ROOT$url"
if [ -f "$filename" ]; then
request $filename
else
if [ -d "$filename" ]; then
for IND in ${INDEX[*]} ; do
if [ -f "$filename/$IND" ] ; then
request "$filename/$IND"
fi
done
if [ "$LISTING" == "1" ] ; then
filelist $filename;
else
error 403
fi
else
error 404
fi
fi
else
while true ; do
rm -f "$CONN_PATH/$1"
mkfifo "$CONN_PATH/$1"
cat "$CONN_PATH/$1" |
nc -l $PORT |
./worker.sh $1 $2 "exec" > "$CONN_PATH/$1"
done
fi