snipt

Ctrl+h for KB shortcuts

Bash

Simple web server in Bash

#!/bin/bash

# bash-httpd, by Morty Abzug <morty@sanctuary.arbutus.md.us>
# v0.02: morty: 1998/11/22: does simple file queries
# v0.01: morty: 1998/11/??: proof of concept

# HOW TO USE:
# assuming this script saved as "webserver.sh", run it with:
# (while true; do nc -l -p 8080 -e webserver.sh; done)&

# Configurable variables
PATH=/bin:/usr/bin
DOC_ROOT=/var/www
DEF_HTML=index.html
DEF_DIR=www
LOG_FACILITY=local1
# End of configurables

HTTP_VERSION="HTTP/1.0"
SERVER="bash-httpd/0.02"

CR=`printf "\015"`
program="${0##/*/}"

response_code(){
	num="$1"
	case "$num" in
		200) err="OK";;
		403) err="Forbidden";;
		404) err="Not Found";;
		500) err="Internal Server Error";;
		501) err="Not Implemented";;
		*)   err="Internal Server Error"
			log err "Unknown response: $num"
			num=500
			;;
	esac
	log notice "response: $num"
	echo "$HTTP_VERSION $num $err"
}

error(){
	response_code $1
	if [ "$2" ]; then problem="$2"; else problem="$err"; fi
cat <<EOF
Content-Type: text/html

<html> <head> <title> $problem </title> 
<body> <h1> $num $problem </h1> $problem </body> </html>
EOF
	log err "$problem"
	exit 1
}

log(){
	level="$1"; message="$2"
	logger -p $LOG_FACILITY."$level" "$program[$$]: $method $url $version: $message"
}



read method url version

method="${method%$CR}";
url="${url%$CR}";
version="${version%$CR}";

case "$version" in
	""|http/0.9|HTTP/0.9) 
		readmore=0;;
	http/1.0|HTTP/1.0|http/1.1|HTTP/1.1)
		readmore=1;;
	*)
		log notice "$method $url $version"
		error 501 "Unknown version";;
esac

if [ "$readmore" != 0 ]; then
	read foo; while [ "$foo" != "$CR" -a "$foo" != "" ]; do read foo; done
fi

case "$method" in
	GET|get) 
		what=get;;
	HEAD|head) 
		what=head;;
	*)
		error 501 "Unimplemented method";;
esac

case "$url" in
	*/../*|*[^/A-Za-z0-9~.-]*) 
		error 403 "Illegal attempt to access resource"
		;;
	/~*)
		user="${url#/~}";
		user="${user%%/*}";
		user=`eval echo ~$user`; # we had *better* have cleaned up $url
		rest="${url#/~*/}"; rest="${rest##/~*}";
		type=file; file="$user/$DEF_DIR/$rest"
		;;
	""|/*)
		type=file; file="$DOC_ROOT/$url"
		;;
	*) 
		error 501 "Unknown request type"
		;;
esac

case $type in 
	file)
		if [   -d "$file" ]; then file="$file/$DEF_HTML"; fi
		if [ ! -e "$file" ]; then error 404; fi
		if [ ! -r "$file" ]; then error 403; fi
		response_code 200
		if [ "$what" = "head" ]; then echo; exit 0; fi
		case "$file" in
			*.html | *.htm)	mime=text/html;;
			*.jpg|*.jpeg)	mime=image/jpeg;;
			*.gif) 		mime=image/gif;;
			*.gz|*.tgz)	mime=application/binary;;
			*.txt|*.text)	mime=text/plain;;
			*)		mime=application/binary;;
		esac
		echo Content-Type: $mime; echo; cat $file
		;;
	*)
		error 501 "Messed up internal type"
		;;
esac

Want to make sure your code is always working? Try custom application monitoring from Instrumental!

Advertisement
https://snipt.net/embed/77796179ed2ef0a481311a2d44a0473e/
https://snipt.net/raw/77796179ed2ef0a481311a2d44a0473e/
77796179ed2ef0a481311a2d44a0473e
bash
Bash
131
2016-10-01T15:00:58
True
False
False
/api/public/snipt/8362/
simple-web-server-in-bash
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10"> 10</a> <a href="#L-11"> 11</a> <a href="#L-12"> 12</a> <a href="#L-13"> 13</a> <a href="#L-14"> 14</a> <a href="#L-15"> 15</a> <a href="#L-16"> 16</a> <a href="#L-17"> 17</a> <a href="#L-18"> 18</a> <a href="#L-19"> 19</a> <a href="#L-20"> 20</a> <a href="#L-21"> 21</a> <a href="#L-22"> 22</a> <a href="#L-23"> 23</a> <a href="#L-24"> 24</a> <a href="#L-25"> 25</a> <a href="#L-26"> 26</a> <a href="#L-27"> 27</a> <a href="#L-28"> 28</a> <a href="#L-29"> 29</a> <a href="#L-30"> 30</a> <a href="#L-31"> 31</a> <a href="#L-32"> 32</a> <a href="#L-33"> 33</a> <a href="#L-34"> 34</a> <a href="#L-35"> 35</a> <a href="#L-36"> 36</a> <a href="#L-37"> 37</a> <a href="#L-38"> 38</a> <a href="#L-39"> 39</a> <a href="#L-40"> 40</a> <a href="#L-41"> 41</a> <a href="#L-42"> 42</a> <a href="#L-43"> 43</a> <a href="#L-44"> 44</a> <a href="#L-45"> 45</a> <a href="#L-46"> 46</a> <a href="#L-47"> 47</a> <a href="#L-48"> 48</a> <a href="#L-49"> 49</a> <a href="#L-50"> 50</a> <a href="#L-51"> 51</a> <a href="#L-52"> 52</a> <a href="#L-53"> 53</a> <a href="#L-54"> 54</a> <a href="#L-55"> 55</a> <a href="#L-56"> 56</a> <a href="#L-57"> 57</a> <a href="#L-58"> 58</a> <a href="#L-59"> 59</a> <a href="#L-60"> 60</a> <a href="#L-61"> 61</a> <a href="#L-62"> 62</a> <a href="#L-63"> 63</a> <a href="#L-64"> 64</a> <a href="#L-65"> 65</a> <a href="#L-66"> 66</a> <a href="#L-67"> 67</a> <a href="#L-68"> 68</a> <a href="#L-69"> 69</a> <a href="#L-70"> 70</a> <a href="#L-71"> 71</a> <a href="#L-72"> 72</a> <a href="#L-73"> 73</a> <a href="#L-74"> 74</a> <a href="#L-75"> 75</a> <a href="#L-76"> 76</a> <a href="#L-77"> 77</a> <a href="#L-78"> 78</a> <a href="#L-79"> 79</a> <a href="#L-80"> 80</a> <a href="#L-81"> 81</a> <a href="#L-82"> 82</a> <a href="#L-83"> 83</a> <a href="#L-84"> 84</a> <a href="#L-85"> 85</a> <a href="#L-86"> 86</a> <a href="#L-87"> 87</a> <a href="#L-88"> 88</a> <a href="#L-89"> 89</a> <a href="#L-90"> 90</a> <a href="#L-91"> 91</a> <a href="#L-92"> 92</a> <a href="#L-93"> 93</a> <a href="#L-94"> 94</a> <a href="#L-95"> 95</a> <a href="#L-96"> 96</a> <a href="#L-97"> 97</a> <a href="#L-98"> 98</a> <a href="#L-99"> 99</a> <a href="#L-100">100</a> <a href="#L-101">101</a> <a href="#L-102">102</a> <a href="#L-103">103</a> <a href="#L-104">104</a> <a href="#L-105">105</a> <a href="#L-106">106</a> <a href="#L-107">107</a> <a href="#L-108">108</a> <a href="#L-109">109</a> <a href="#L-110">110</a> <a href="#L-111">111</a> <a href="#L-112">112</a> <a href="#L-113">113</a> <a href="#L-114">114</a> <a href="#L-115">115</a> <a href="#L-116">116</a> <a href="#L-117">117</a> <a href="#L-118">118</a> <a href="#L-119">119</a> <a href="#L-120">120</a> <a href="#L-121">121</a> <a href="#L-122">122</a> <a href="#L-123">123</a> <a href="#L-124">124</a> <a href="#L-125">125</a> <a href="#L-126">126</a> <a href="#L-127">127</a> <a href="#L-128">128</a> <a href="#L-129">129</a> <a href="#L-130">130</a></pre></div></td><td class="code"><div class="highlight"><pre><span id="L-1"><a name="L-1"></a><span class="c">#!/bin/bash</span> </span><span id="L-2"><a name="L-2"></a> </span><span id="L-3"><a name="L-3"></a><span class="c"># bash-httpd, by Morty Abzug &lt;morty@sanctuary.arbutus.md.us&gt;</span> </span><span id="L-4"><a name="L-4"></a><span class="c"># v0.02: morty: 1998/11/22: does simple file queries</span> </span><span id="L-5"><a name="L-5"></a><span class="c"># v0.01: morty: 1998/11/??: proof of concept</span> </span><span id="L-6"><a name="L-6"></a> </span><span id="L-7"><a name="L-7"></a><span class="c"># HOW TO USE:</span> </span><span id="L-8"><a name="L-8"></a><span class="c"># assuming this script saved as &quot;webserver.sh&quot;, run it with:</span> </span><span id="L-9"><a name="L-9"></a><span class="c"># (while true; do nc -l -p 8080 -e webserver.sh; done)&amp;</span> </span><span id="L-10"><a name="L-10"></a> </span><span id="L-11"><a name="L-11"></a><span class="c"># Configurable variables</span> </span><span id="L-12"><a name="L-12"></a><span class="nv">PATH</span><span class="o">=</span>/bin:/usr/bin </span><span id="L-13"><a name="L-13"></a><span class="nv">DOC_ROOT</span><span class="o">=</span>/var/www </span><span id="L-14"><a name="L-14"></a><span class="nv">DEF_HTML</span><span class="o">=</span>index.html </span><span id="L-15"><a name="L-15"></a><span class="nv">DEF_DIR</span><span class="o">=</span>www </span><span id="L-16"><a name="L-16"></a><span class="nv">LOG_FACILITY</span><span class="o">=</span>local1 </span><span id="L-17"><a name="L-17"></a><span class="c"># End of configurables</span> </span><span id="L-18"><a name="L-18"></a> </span><span id="L-19"><a name="L-19"></a><span class="nv">HTTP_VERSION</span><span class="o">=</span><span class="s2">&quot;HTTP/1.0&quot;</span> </span><span id="L-20"><a name="L-20"></a><span class="nv">SERVER</span><span class="o">=</span><span class="s2">&quot;bash-httpd/0.02&quot;</span> </span><span id="L-21"><a name="L-21"></a> </span><span id="L-22"><a name="L-22"></a><span class="nv">CR</span><span class="o">=</span><span class="sb">`</span><span class="nb">printf</span> <span class="s2">&quot;\015&quot;</span><span class="sb">`</span> </span><span id="L-23"><a name="L-23"></a><span class="nv">program</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">0</span><span class="p">##/*/</span><span class="si">}</span><span class="s2">&quot;</span> </span><span id="L-24"><a name="L-24"></a> </span><span id="L-25"><a name="L-25"></a>response_code<span class="o">(){</span> </span><span id="L-26"><a name="L-26"></a> <span class="nv">num</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span> </span><span id="L-27"><a name="L-27"></a> <span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$num</span><span class="s2">&quot;</span> in </span><span id="L-28"><a name="L-28"></a> 200<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;OK&quot;</span><span class="p">;;</span> </span><span id="L-29"><a name="L-29"></a> 403<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;Forbidden&quot;</span><span class="p">;;</span> </span><span id="L-30"><a name="L-30"></a> 404<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;Not Found&quot;</span><span class="p">;;</span> </span><span id="L-31"><a name="L-31"></a> 500<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;Internal Server Error&quot;</span><span class="p">;;</span> </span><span id="L-32"><a name="L-32"></a> 501<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;Not Implemented&quot;</span><span class="p">;;</span> </span><span id="L-33"><a name="L-33"></a> *<span class="o">)</span> <span class="nv">err</span><span class="o">=</span><span class="s2">&quot;Internal Server Error&quot;</span> </span><span id="L-34"><a name="L-34"></a> log err <span class="s2">&quot;Unknown response: </span><span class="nv">$num</span><span class="s2">&quot;</span> </span><span id="L-35"><a name="L-35"></a> <span class="nv">num</span><span class="o">=</span>500 </span><span id="L-36"><a name="L-36"></a> <span class="p">;;</span> </span><span id="L-37"><a name="L-37"></a> <span class="k">esac</span> </span><span id="L-38"><a name="L-38"></a> log notice <span class="s2">&quot;response: </span><span class="nv">$num</span><span class="s2">&quot;</span> </span><span id="L-39"><a name="L-39"></a> <span class="nb">echo</span> <span class="s2">&quot;</span><span class="nv">$HTTP_VERSION</span><span class="s2"> </span><span class="nv">$num</span><span class="s2"> </span><span class="nv">$err</span><span class="s2">&quot;</span> </span><span id="L-40"><a name="L-40"></a><span class="o">}</span> </span><span id="L-41"><a name="L-41"></a> </span><span id="L-42"><a name="L-42"></a>error<span class="o">(){</span> </span><span id="L-43"><a name="L-43"></a> response_code <span class="nv">$1</span> </span><span id="L-44"><a name="L-44"></a> <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$2</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nv">problem</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$2</span><span class="s2">&quot;</span><span class="p">;</span> <span class="k">else</span> <span class="nv">problem</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$err</span><span class="s2">&quot;</span><span class="p">;</span> <span class="k">fi</span> </span><span id="L-45"><a name="L-45"></a>cat <span class="s">&lt;&lt;EOF</span> </span><span id="L-46"><a name="L-46"></a><span class="s">Content-Type: text/html</span> </span><span id="L-47"><a name="L-47"></a> </span><span id="L-48"><a name="L-48"></a><span class="s">&lt;html&gt; &lt;head&gt; &lt;title&gt; $problem &lt;/title&gt; </span> </span><span id="L-49"><a name="L-49"></a><span class="s">&lt;body&gt; &lt;h1&gt; $num $problem &lt;/h1&gt; $problem &lt;/body&gt; &lt;/html&gt;</span> </span><span id="L-50"><a name="L-50"></a><span class="s">EOF</span> </span><span id="L-51"><a name="L-51"></a> log err <span class="s2">&quot;</span><span class="nv">$problem</span><span class="s2">&quot;</span> </span><span id="L-52"><a name="L-52"></a> <span class="nb">exit </span>1 </span><span id="L-53"><a name="L-53"></a><span class="o">}</span> </span><span id="L-54"><a name="L-54"></a> </span><span id="L-55"><a name="L-55"></a>log<span class="o">(){</span> </span><span id="L-56"><a name="L-56"></a> <span class="nv">level</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span><span class="p">;</span> <span class="nv">message</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$2</span><span class="s2">&quot;</span> </span><span id="L-57"><a name="L-57"></a> logger -p <span class="nv">$LOG_FACILITY</span>.<span class="s2">&quot;</span><span class="nv">$level</span><span class="s2">&quot;</span> <span class="s2">&quot;</span><span class="nv">$program</span><span class="s2">[</span><span class="nv">$$</span><span class="s2">]: </span><span class="nv">$method</span><span class="s2"> </span><span class="nv">$url</span><span class="s2"> </span><span class="nv">$version</span><span class="s2">: </span><span class="nv">$message</span><span class="s2">&quot;</span> </span><span id="L-58"><a name="L-58"></a><span class="o">}</span> </span><span id="L-59"><a name="L-59"></a> </span><span id="L-60"><a name="L-60"></a> </span><span id="L-61"><a name="L-61"></a> </span><span id="L-62"><a name="L-62"></a><span class="nb">read </span>method url version </span><span id="L-63"><a name="L-63"></a> </span><span id="L-64"><a name="L-64"></a><span class="nv">method</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">method</span><span class="p">%</span><span class="nv">$CR</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-65"><a name="L-65"></a><span class="nv">url</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">url</span><span class="p">%</span><span class="nv">$CR</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-66"><a name="L-66"></a><span class="nv">version</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">version</span><span class="p">%</span><span class="nv">$CR</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-67"><a name="L-67"></a> </span><span id="L-68"><a name="L-68"></a><span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$version</span><span class="s2">&quot;</span> in </span><span id="L-69"><a name="L-69"></a> <span class="s2">&quot;&quot;</span><span class="p">|</span>http/0.9<span class="p">|</span>HTTP/0.9<span class="o">)</span> </span><span id="L-70"><a name="L-70"></a> <span class="nv">readmore</span><span class="o">=</span>0<span class="p">;;</span> </span><span id="L-71"><a name="L-71"></a> http/1.0<span class="p">|</span>HTTP/1.0<span class="p">|</span>http/1.1<span class="p">|</span>HTTP/1.1<span class="o">)</span> </span><span id="L-72"><a name="L-72"></a> <span class="nv">readmore</span><span class="o">=</span>1<span class="p">;;</span> </span><span id="L-73"><a name="L-73"></a> *<span class="o">)</span> </span><span id="L-74"><a name="L-74"></a> log notice <span class="s2">&quot;</span><span class="nv">$method</span><span class="s2"> </span><span class="nv">$url</span><span class="s2"> </span><span class="nv">$version</span><span class="s2">&quot;</span> </span><span id="L-75"><a name="L-75"></a> error <span class="m">501</span> <span class="s2">&quot;Unknown version&quot;</span><span class="p">;;</span> </span><span id="L-76"><a name="L-76"></a><span class="k">esac</span> </span><span id="L-77"><a name="L-77"></a> </span><span id="L-78"><a name="L-78"></a><span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$readmore</span><span class="s2">&quot;</span> !<span class="o">=</span> <span class="m">0</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> </span><span id="L-79"><a name="L-79"></a> <span class="nb">read </span>foo<span class="p">;</span> <span class="k">while</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$foo</span><span class="s2">&quot;</span> !<span class="o">=</span> <span class="s2">&quot;</span><span class="nv">$CR</span><span class="s2">&quot;</span> -a <span class="s2">&quot;</span><span class="nv">$foo</span><span class="s2">&quot;</span> !<span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">do</span> <span class="nb">read </span>foo<span class="p">;</span> <span class="k">done</span> </span><span id="L-80"><a name="L-80"></a><span class="k">fi</span> </span><span id="L-81"><a name="L-81"></a> </span><span id="L-82"><a name="L-82"></a><span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$method</span><span class="s2">&quot;</span> in </span><span id="L-83"><a name="L-83"></a> GET<span class="p">|</span>get<span class="o">)</span> </span><span id="L-84"><a name="L-84"></a> <span class="nv">what</span><span class="o">=</span>get<span class="p">;;</span> </span><span id="L-85"><a name="L-85"></a> HEAD<span class="p">|</span>head<span class="o">)</span> </span><span id="L-86"><a name="L-86"></a> <span class="nv">what</span><span class="o">=</span>head<span class="p">;;</span> </span><span id="L-87"><a name="L-87"></a> *<span class="o">)</span> </span><span id="L-88"><a name="L-88"></a> error <span class="m">501</span> <span class="s2">&quot;Unimplemented method&quot;</span><span class="p">;;</span> </span><span id="L-89"><a name="L-89"></a><span class="k">esac</span> </span><span id="L-90"><a name="L-90"></a> </span><span id="L-91"><a name="L-91"></a><span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$url</span><span class="s2">&quot;</span> in </span><span id="L-92"><a name="L-92"></a> */../*<span class="p">|</span>*<span class="o">[</span>^/A-Za-z0-9~.-<span class="o">]</span>*<span class="o">)</span> </span><span id="L-93"><a name="L-93"></a> error <span class="m">403</span> <span class="s2">&quot;Illegal attempt to access resource&quot;</span> </span><span id="L-94"><a name="L-94"></a> <span class="p">;;</span> </span><span id="L-95"><a name="L-95"></a> /~*<span class="o">)</span> </span><span id="L-96"><a name="L-96"></a> <span class="nv">user</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">url</span><span class="p">#/~</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-97"><a name="L-97"></a> <span class="nv">user</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">user</span><span class="p">%%/*</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-98"><a name="L-98"></a> <span class="nv">user</span><span class="o">=</span><span class="sb">`</span><span class="nb">eval echo</span> ~<span class="nv">$user</span><span class="sb">`</span><span class="p">;</span> <span class="c"># we had *better* have cleaned up $url</span> </span><span id="L-99"><a name="L-99"></a> <span class="nv">rest</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">url</span><span class="p">#/~*/</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> <span class="nv">rest</span><span class="o">=</span><span class="s2">&quot;</span><span class="si">${</span><span class="nv">rest</span><span class="p">##/~*</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span> </span><span id="L-100"><a name="L-100"></a> <span class="nb">type</span><span class="o">=</span>file<span class="p">;</span> <span class="nv">file</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$user</span><span class="s2">/</span><span class="nv">$DEF_DIR</span><span class="s2">/</span><span class="nv">$rest</span><span class="s2">&quot;</span> </span><span id="L-101"><a name="L-101"></a> <span class="p">;;</span> </span><span id="L-102"><a name="L-102"></a> <span class="s2">&quot;&quot;</span><span class="p">|</span>/*<span class="o">)</span> </span><span id="L-103"><a name="L-103"></a> <span class="nb">type</span><span class="o">=</span>file<span class="p">;</span> <span class="nv">file</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$DOC_ROOT</span><span class="s2">/</span><span class="nv">$url</span><span class="s2">&quot;</span> </span><span id="L-104"><a name="L-104"></a> <span class="p">;;</span> </span><span id="L-105"><a name="L-105"></a> *<span class="o">)</span> </span><span id="L-106"><a name="L-106"></a> error <span class="m">501</span> <span class="s2">&quot;Unknown request type&quot;</span> </span><span id="L-107"><a name="L-107"></a> <span class="p">;;</span> </span><span id="L-108"><a name="L-108"></a><span class="k">esac</span> </span><span id="L-109"><a name="L-109"></a> </span><span id="L-110"><a name="L-110"></a><span class="k">case</span> <span class="nv">$type</span> in </span><span id="L-111"><a name="L-111"></a> file<span class="o">)</span> </span><span id="L-112"><a name="L-112"></a> <span class="k">if</span> <span class="o">[</span> -d <span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nv">file</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">/</span><span class="nv">$DEF_HTML</span><span class="s2">&quot;</span><span class="p">;</span> <span class="k">fi</span> </span><span id="L-113"><a name="L-113"></a> <span class="k">if</span> <span class="o">[</span> ! -e <span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> error 404<span class="p">;</span> <span class="k">fi</span> </span><span id="L-114"><a name="L-114"></a> <span class="k">if</span> <span class="o">[</span> ! -r <span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> error 403<span class="p">;</span> <span class="k">fi</span> </span><span id="L-115"><a name="L-115"></a> response_code 200 </span><span id="L-116"><a name="L-116"></a> <span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;</span><span class="nv">$what</span><span class="s2">&quot;</span> <span class="o">=</span> <span class="s2">&quot;head&quot;</span> <span class="o">]</span><span class="p">;</span> <span class="k">then</span> <span class="nb">echo</span><span class="p">;</span> <span class="nb">exit </span>0<span class="p">;</span> <span class="k">fi</span> </span><span id="L-117"><a name="L-117"></a> <span class="k">case</span> <span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span> in </span><span id="L-118"><a name="L-118"></a> *.html <span class="p">|</span> *.htm<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>text/html<span class="p">;;</span> </span><span id="L-119"><a name="L-119"></a> *.jpg<span class="p">|</span>*.jpeg<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>image/jpeg<span class="p">;;</span> </span><span id="L-120"><a name="L-120"></a> *.gif<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>image/gif<span class="p">;;</span> </span><span id="L-121"><a name="L-121"></a> *.gz<span class="p">|</span>*.tgz<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>application/binary<span class="p">;;</span> </span><span id="L-122"><a name="L-122"></a> *.txt<span class="p">|</span>*.text<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>text/plain<span class="p">;;</span> </span><span id="L-123"><a name="L-123"></a> *<span class="o">)</span> <span class="nv">mime</span><span class="o">=</span>application/binary<span class="p">;;</span> </span><span id="L-124"><a name="L-124"></a> <span class="k">esac</span> </span><span id="L-125"><a name="L-125"></a> <span class="nb">echo </span>Content-Type: <span class="nv">$mime</span><span class="p">;</span> <span class="nb">echo</span><span class="p">;</span> cat <span class="nv">$file</span> </span><span id="L-126"><a name="L-126"></a> <span class="p">;;</span> </span><span id="L-127"><a name="L-127"></a> *<span class="o">)</span> </span><span id="L-128"><a name="L-128"></a> error <span class="m">501</span> <span class="s2">&quot;Messed up internal type&quot;</span> </span><span id="L-129"><a name="L-129"></a> <span class="p">;;</span> </span><span id="L-130"><a name="L-130"></a><span class="k">esac</span> </span></pre></div> </td></tr></table>
"web server", bash, server, web
Copyrighted, illegal, or inappropriate content? Email support@snipt.net.