From: Ralph Ronnquist Date: Wed, 5 Jan 2022 06:12:59 +0000 (+1100) Subject: debugging galore X-Git-Tag: 0.1~10 X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=a0971e1ea5dd4963e51a5dd0c24d90c443c1dc84;p=rrq%2Fhourglass.git debugging galore --- diff --git a/Makefile b/Makefile index 17745a1..7c058ba 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ MAIN = command.lsp LSP = $(filter-out $(MAIN),$(wildcard *.lsp)) BIN = hourglass hourglass-web DOCS = hourglass-guide.html hourglass-guide.pdf +IMGS = $(wildcard *.png) OTHER = setup.sh hourglass.conf VERSION = 0.1 @@ -10,20 +11,19 @@ dist: hourglass-$(VERSION).tgz hourglass: $(MAIN) $(LSP) packnl -w $@ $^ -hourglass-web: +hourglass-web: manager siteconfig.lsp $(MAKE) -C manager mv manager/$@ $@ -hourglass-$(VERSION).tgz: $(BIN) $(OTHER) $(DOCS) +hourglass-$(VERSION).tgz: $(BIN) $(OTHER) $(DOCS) $(IMGS) tar czf $@ $^ %.html: %.adoc asciidoctor $< > $@ -hourglass-guide.pdf: $(wildcard *.png) - -%.pdf: %.adoc +%.pdf: %.adoc | $(IMGS) asciidoctor-pdf $< > $@ clean: + $(MAKE) -C manager clean rm -f $(BIN) hourglass-$(VERSION).tgz diff --git a/hourglass-operator.png b/hourglass-operator.png index 355bf5a..8d75806 100644 Binary files a/hourglass-operator.png and b/hourglass-operator.png differ diff --git a/listener.lsp b/listener.lsp index 6652ed4..388486f 100644 --- a/listener.lsp +++ b/listener.lsp @@ -33,7 +33,7 @@ # default. Then make a TUNSETIFF call to initialize it (as # IFF_TAP|IFF_NO_PI). (constant - 'listener-log-ip SITE:listener.ip + 'listener-log-ip SITE:listener.log.ip 'IFNAME SITE:listener.tap 'PORTS SITE:listener.ports 'IFD (open SITE:tundev "u") @@ -116,8 +116,8 @@ (define (udp-handler) ; buffer ihl (let ((ports (map ntohs (unpack "uu" ((+ ihl 14) buffer))))) - (when (intersect ports PORTS) (mark-active (date-value))))) - + (when PORTS (intersect ports PORTS) (mark-active (date-value))))) + # Handle an IPv4 packet. It recognises the IPv4 protocol concerned, # and dispatches to the associated handler, if any. (define (ipv4-handler) ; buffer diff --git a/manager/Makefile b/manager/Makefile index 7589bac..638eb47 100644 --- a/manager/Makefile +++ b/manager/Makefile @@ -14,3 +14,6 @@ siteconfig.lsp: ../siteconfig.lsp hourglass-web: $(MAIN) $(LSP) $(TMPL) $(OTHER) packnl -w $@ $^ + +clean: + rm -f hourglass-web siteconfig.lsp diff --git a/manager/basic_login.lsp b/manager/basic_login.lsp index 38b7ac4..c4488d3 100644 --- a/manager/basic_login.lsp +++ b/manager/basic_login.lsp @@ -7,27 +7,29 @@ ;; this file as a packnl embedding that will use that X part of its ;; name to determine th actual script. -(load "siteconfig.lsp") - -(write-line 2 (string (date-value) " " (main-args))) +;(write-line 2 (string (date-value) " " (main-args))) (unless (ends-with (main-args 0) ".cgi") + (load "siteconfig.lsp") (if (exists file? (list (main-args 1) (string (main-args 1) ".lsp"))) (load $it) (write-line 2 (string "Unknown command " (main-args 1)))) (exit 0)) - ;; This script is executed in (protected) subdirectory www (change-dir "..") +(load "siteconfig.lsp") + ;; Needs an HTTP_AUTHORIZATION environment variable (when (empty? (setf AUTH (env "HTTP_AUTHORIZATION"))) + ;(write-line 2 "needs auth") (write-line 1 (read-file "tmpl/unauthorized.http")) (exit 0)) -;; Must find that value in .htpasswd -(unless (ref (6 AUTH) (parse (read-file ".htpasswd") "\n")) +;; Must find that value in wui.passwd +(constant 'PASSWD SITE:wui.passwd) +(unless (ref (6 AUTH) (parse (read-file PASSWD) "\n")) (write-line 1 (read-file "tmpl/unauthorized.http")) (exit 0)) @@ -41,11 +43,12 @@ SCRIPT (role-script) ) (env "REMOTE_USER" REMOTE_USER) -(env "ROLE" ROLE) +;(env "ROLE" ROLE) (unless (file? SCRIPT) (write 1 "\nBroken.\n") (exit 0)) +;(write-line 2 (string (list "script" SCRIPT))) (load SCRIPT) (exit 0) diff --git a/manager/controls-update.lsp b/manager/controls-update.lsp index 2085462..bddef91 100644 --- a/manager/controls-update.lsp +++ b/manager/controls-update.lsp @@ -17,8 +17,6 @@ (let ((data "")(b "") (c '()) (v nil)) (while (read 0 b 1000) (extend data b)) (setf v (map (fn (x) (parse x "=")) (parse data "&"))) - (push (list 'gap (int-parse (lookup "gap" v))) c -1) - (push (list 'clip (int-parse (lookup "clip" v))) c -1) (for (i 1 7) (push (list i (mode-parse (lookup (string "mode" i) v)) diff --git a/manager/controls.lsp b/manager/controls.lsp index 10153df..555e49b 100644 --- a/manager/controls.lsp +++ b/manager/controls.lsp @@ -4,6 +4,8 @@ (constant 'CONTROLFILE SITE:control.dat + 'GAP SITE:control.activity.gap + 'CLIP control.activity.clip ) (setf UPDATE "") @@ -12,29 +14,28 @@ (load "controls-update.lsp") ) -(constant - 'CONTROL (read-expr (read-file CONTROLFILE)) - 'GAP (or (lookup 'gap CONTROL) 5) - 'CLIP (or (lookup 'clip CONTROL) 5) - 'TIMES (map (fn (n) (or (assoc n CONTROL) '(1 timed (7 0) (3 0) (19 0)))) - (sequence 1 7)) - ) +(define (time-row n) + (or (assoc n CONTROL) (cons n (copy '(timed (7 0) (3 0) (19 0)))))) (setf DAYS '(0 "Mon" "Tue" "Wed" "Thu" "Fri" "Sat" "Sun") - gap-options '(0 1 2 5 10 15 30) - clip-options '(0 200 500 800 1000 1200 1500 2000) + CONTROL (read-expr (read-file CONTROLFILE)) + TIMES (map time-row (sequence 1 7)) mode-options '("opened" "timed" "closed") start-options '() end-options '() limit-options '() ) -(dotimes (h 24) (dolist (m '(0 30)) - (push (format "%02d:%02d" h m) start-options -1))) -(dotimes (h 24) (dolist (m '(0 30)) - (push (format "%02d:%02d" h m) end-options -1))) -(for (h 1 8) (dolist (m '(0 30)) - (push (format "%02d:%02d" h m) limit-options -1))) + +(dotimes (h 24) + (dolist (m '(0 30)) + (push (format "%02d:%02d" h m) start-options -1))) +(dotimes (h 24) + (dolist (m '(0 30)) + (push (format "%02d:%02d" h m) end-options -1))) +(for (h 1 8) + (dolist (m '(0 30)) + (push (format "%02d:%02d" h m) limit-options -1))) (println "Status 200 OK\nContent-Type: text/html\n\n") (println (expand-file "tmpl/controls-form.html" )) diff --git a/manager/index.lsp b/manager/index.lsp index 16003fb..3ad8090 100644 --- a/manager/index.lsp +++ b/manager/index.lsp @@ -1,6 +1,4 @@ (load "expand-string.lsp") -(write-line 2 (string "index.lsp")) -(write-line 2 (string (expand-file "tmpl/index-page.html"))) (println "Status 200 OK\nContent-Type: text/html\n\n") (println (expand-file "tmpl/index-page.html")) (exit 0) diff --git a/manager/tmpl/unauthorized.http b/manager/tmpl/unauthorized.http index c549985..a4d664d 100644 --- a/manager/tmpl/unauthorized.http +++ b/manager/tmpl/unauthorized.http @@ -1,2 +1,4 @@ Status: 401 Unauthorized WWW-Authenticate: Basic realm="Hourglass" + +This site needs authentication. diff --git a/manager/www/hourglass.css b/manager/www/hourglass.css index 1a378de..ce8b0e1 100644 --- a/manager/www/hourglass.css +++ b/manager/www/hourglass.css @@ -29,11 +29,11 @@ p { } #history { width: 80%; - height: 120px; + height: 220px; } #controls { width: 60%; - height: 430px; + height: 330px; // border: none; } #form_submit { diff --git a/setup.sh b/setup.sh index 4cf7a80..951d3ac 100755 --- a/setup.sh +++ b/setup.sh @@ -5,12 +5,19 @@ CONF="hourglass.conf" function getcfg() { - grep -E "\\s*[^;#]$1]\\s*=" $CONF | sed 's/.*=\s*(.*)/\1/;s/\s*$//' + awk -v K="$1" '$1==K {print;exit;}' $CONF | + sed 's/^[^=]*=\s*//;s/\s*$//' } - -NET="$(getcfg listener.ip)" +NET="$(getcfg listener.net)" TAP="$(getcfg listener.tap)" SET="$(getcfg ipset.table)" +CMD="${1-start}" + +cat <> /tmp/hourglass-listener.log - newlisp listener.lsp >> /tmp/hourglass-listener.log 2>&1 & + ./hourglass listener >> /tmp/hourglass-listener.log 2>&1 & while sleep 1 ; do ifconfig $TAP >& /dev/null && break - echo $TAP not up yet + echo $TAP not up yet >&2 done ifconfig $TAP $NET.1 up - iptables -t mangle -A FORWARD -p tcp --dport 53 -j RETURN - iptables -t mangle -A FORWARD -p udp --dport 53 -j RETURN iptables -t mangle -A FORWARD ${RULE[@]} fi ;; stop) - iptables -t mangle -F FORWARD if ifconfig $TAP >& /dev/null ; then - pkill -2 -f listener.lsp + pkill -2 -f "hourglass listener" else echo "Already stopped" fi ipset flush $SET + iptables -t mangle -D FORWARD ${RULE[@]} ;; *) echo "Unknown: $CMD" diff --git a/siteconfig.lsp b/siteconfig.lsp index 1050918..69f0fbb 100644 --- a/siteconfig.lsp +++ b/siteconfig.lsp @@ -3,16 +3,17 @@ (define (set-int K V) (set K (int V 0 10))) (define (set-ints K V) - (map (curry set-int K) (clean empty? (parse V "\\s*,?\\s*" 0)))) + (set K (map int (clean empty? (parse V "(\\s+|\\s*,\\s*)" 0))))) (define (set-list K V) - (map (curry set K) (clean empty? (parse V "\\s*,?\\s*" 0)))) + (set K (clean empty? (parse V "(\\s+|\\s*,\\s*)" 0)))) (constant 'FILE "hourglass.conf" 'KEYS '( ("listener.ports" set-ints) - ("listener.ip" set) + ("listener.net" set) + ("listener.log.ip" set) ("listener.activity.dir" set) ("listener.tap" set) @@ -37,9 +38,12 @@ ) (define (setting LINE) - (when (regex "^\\s([^;#][^=]*)=(.*)" LINE 0) + (when (regex "^\\s*([^;#][^=]*)=(.*)" LINE 0) (let ((KV (map trim (list $1 $2)))) - (if (lookup (KV 0) KEYS) (apply $it (list (sym (KV 0)) (KV 1))))))) + (if (lookup (KV 0) KEYS) + (let ((SET $it) (K (sym (KV 0))) (V (KV 1))) + ;(write-line 2 (string (list K V))) + (apply SET (list K V))))))) (map setting (parse (or (read-file FILE) "") "\n"))