debugging galore
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Wed, 5 Jan 2022 06:12:59 +0000 (17:12 +1100)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Wed, 5 Jan 2022 06:12:59 +0000 (17:12 +1100)
12 files changed:
Makefile
hourglass-operator.png
listener.lsp
manager/Makefile
manager/basic_login.lsp
manager/controls-update.lsp
manager/controls.lsp
manager/index.lsp
manager/tmpl/unauthorized.http
manager/www/hourglass.css
setup.sh
siteconfig.lsp

index 17745a12e6a065dfeee5c2846c80737d4f357fe7..7c058ba07ae4666e8b444bc97a6514cf73ed2c2b 100644 (file)
--- 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
index 355bf5a2fbc59befdf305a1782a69816e39a3f1a..8d7580623a6a0eba1923f17f331225b089c9b7b2 100644 (file)
Binary files a/hourglass-operator.png and b/hourglass-operator.png differ
index 6652ed456c22f928cd2d7df78fbeb98ebd1aa263..388486f6a14d5badcd5ff10e392fbc58d1facf60 100644 (file)
@@ -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")
 
 (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
index 7589bacec17372b717cd3c1743cee6b2b85f6dcb..638eb47b4927c1dd0423fdee3a84349ac7f95b11 100644 (file)
@@ -14,3 +14,6 @@ siteconfig.lsp: ../siteconfig.lsp
 
 hourglass-web: $(MAIN) $(LSP) $(TMPL) $(OTHER)
        packnl -w $@ $^
+
+clean:
+       rm -f hourglass-web siteconfig.lsp
index 38b7ac490b56a7ef827c6ac8f5e5b7808825c527..c4488d37936be306457b5baebc1e738728f16763 100644 (file)
@@ -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))
 
  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)
index 2085462724666cd6a512096e08a904f99cd714fb..bddef9199b3e2587a91b2beb9811ff3b2862c964 100644 (file)
@@ -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))
index 10153dfdf5eb65f4e25bdcedf3d0990180a94d13..555e49b076ff1387b75179c44fac304ef167780e 100644 (file)
@@ -4,6 +4,8 @@
 
 (constant
  'CONTROLFILE SITE:control.dat
+ 'GAP SITE:control.activity.gap
+ 'CLIP control.activity.clip
  )
 
 (setf UPDATE "")
   (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" ))
index 16003fb1506b69d6408de4d23ee208b655448005..3ad8090fa62cc2fc6d43ea5d857923fe273d3b66 100644 (file)
@@ -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)
index c549985381284db7d39f7ba354af44b6e692ae51..a4d664d46227d30ed080bbe74e98a7b013a2b368 100644 (file)
@@ -1,2 +1,4 @@
 Status: 401 Unauthorized
 WWW-Authenticate: Basic realm="Hourglass"
+
+This site needs authentication.
index 1a378deeb67e746c2bc45701f01ae003ce3afb7a..ce8b0e13e56cb22cad0b527d7d7ce28a7dfd09bf 100644 (file)
@@ -29,11 +29,11 @@ p {
 }
 #history {
     width: 80%;
-    height: 120px;
+    height: 220px;
 }
 #controls {
     width: 60%;
-    height: 430px;
+    height: 330px;
 //    border: none;
 }
 #form_submit {
index 4cf7a80d8c6ffdb89e89bab1042029d40583208c..951d3aca0e7b33408f7293dab3f5e5ca1d8da6fb 100755 (executable)
--- 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 <<EOF
+NET=$NET:
+TAP=$TAP:
+SET=$SET:
+EOF
 
 cd $(dirname $0)
 
@@ -26,8 +33,6 @@ case "$CMD" in
            else
                ipset create $SET hash:net
            fi
-           iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
-           iptables -A FORWARD -p udp --dport 53 -j ACCEPT
            iptables -A FORWARD -m set --match-set $SET src -j DROP
        fi
        # Start the traffic listener
@@ -35,25 +40,23 @@ case "$CMD" in
            echo "Already started"
        else
            date >> /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"
index 1050918a475f7621b20948b04c1273eef41398ab..69f0fbb7ded19803550524b536dafd838e56bf0a 100644 (file)
@@ -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)
 
  )
 
 (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"))