shithub: werc

Download patch

ref: c194c149b38be2ae3c047ed13f49866d01d833bb
parent: 76e8e46c46f9df6b92fd71fa286d93d113a95128
author: uriel <uriel@engel.se.cat-v.org>
date: Fri Mar 13 20:28:34 EDT 2009

Rewrite redirect handling code with nested lists.
New ll_addh to add items to the head of a nested list (use with care!).

--- a/bin/cgilib.rc
+++ b/bin/cgilib.rc
@@ -157,6 +157,13 @@
     $_l=$*(2-)
     $1=( $$1 $_l )
 }
+# Add to the head: dangerous if you shrink list by hand!
+fn ll_addh {
+    _l=$1^_^$#$1
+    $_l=$*(2-)
+    $1=( $_l $$1 )
+}
+
 
 NEW_LINE='
 '
--- a/bin/werc.rc
+++ b/bin/werc.rc
@@ -89,20 +89,16 @@
 
     if(~ $#perm_redir_to 1)
         perm_redirect $perm_redir_to
-    p=();
-    for(i in $perm_redir_patterns) {
-        if(~ $#p 0)
-            p=$i
-        if not {
-            # If target is absolute, require patern matches whole string
-            if(~ $i http://* https://)
-                p='^'$p 
-            t=`{ echo $req_path | sed 's!'$p'!'$i'!' }
+    for(l in $perm_redir_patterns) {
+        p=$$l
+        r=$p(1)
+        # If target is absolute, then patern must match whole string
+        if(~ $p(2) http://* https://)
+            r='^'$r 
+        t=`{ echo $req_path | sed 's!'^$r^'!'^$p(2)^'!' } # Malicious danger!
 
-            if(! ~ $"t '' && ! ~ $t $req_path)
-                perm_redirect $t
-            p=() 
-        } 
+        if(! ~ $"t '' $req_path)
+            perm_redirect $t
     }
 
     # Set Page title
--- a/bin/wercconf.rc
+++ b/bin/wercconf.rc
@@ -3,7 +3,7 @@
     if(~ $#* 1)
         perm_redir_to=$1
     if not
-        perm_redir_patterns=($1 $2 $perm_redir_patterns)
+        ll_addh perm_redir_patterns $1 $2
 }
 
 fn conf_hide_paths {