X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=stest%2Fcommon.tcl;h=a58ca6fbd7048d244394bf179a84a65a83850e35;hb=31c904ba594c34409eacde50020539c7290a460a;hp=0c1202ca378b3b34ed58820447a0a206a13ec628;hpb=ea31544cc33afdb355ad524e14c3703b2fe85ce0;p=secnet.git diff --git a/stest/common.tcl b/stest/common.tcl index 0c1202c..a58ca6f 100644 --- a/stest/common.tcl +++ b/stest/common.tcl @@ -80,11 +80,13 @@ exec cat local-key rsa-private(\"$builddir/test-example/$site.key\"); " append cfg $extra($site) - append cfg { + append cfg " log logfile { - filename "/dev/tty"; - class "info","notice","warning","error","security","fatal"; + prefix \"$site\"; + class \"debug\",\"info\",\"notice\",\"warning\",\"error\",\"security\",\"fatal\"; }; + " + append cfg { system { }; resolver adns { @@ -108,15 +110,46 @@ proc spawn-secnet {location site} { global tmp global builddir global netlinkfh + global env + global pidmap upvar #0 pids($site) pid set cf $tmp/$site.conf set ch [open $cf w] puts $ch [mkconf $location $site] close $ch set argl [list $builddir/secnet -dvnc $cf] - set pid [fork] - if {!$pid} { - execl [lindex $argl 0] [lrange $argl 1 end] + set divertk SECNET_STEST_DIVERT_$site + puts -nonewline "spawn" + foreach k [array names env] { + switch -glob $k { + SECNET_STEST_DIVERT_* - + SECNET_TEST_BUILDDIR { } + *SECNET* - + *PRELOAD* { puts -nonewline " $k=$env($k)" } + } + } + puts " $argl" + if {[info exists env($divertk)]} { + switch -glob $env($divertk) { + i { + puts -nonewline "run ^ command, hit return " + flush stdout + gets stdin + set argl {} + } + 0 - "" { + } + * { + set argl [split $env($divertk)] + } + } + } + if {[llength $argl]} { + set pid [fork] + set pidmap($pid) "secnet $location/$site" + if {!$pid} { + execl [lindex $argl 0] [lrange $argl 1 end] + } } puts -nonewline $netlinkfh($site.t) [hbytes h2raw c0] } @@ -128,8 +161,7 @@ proc netlink-readable {location site} { switch -exact $site { inside { puts OK - set ok 1; # what a bodge - return + finish 0 } outside { error "inside rx'd!" @@ -149,7 +181,7 @@ $message ---------------------------------------- " } - exit 1 + finish 1 } proc sendpkt {} { @@ -168,13 +200,38 @@ proc sendpkt {} { set socktmp $tmp/s exec mkdir -p -m700 $socktmp -regsub {^(?!/)} $socktmp {./} socktmp ;# dgram-socket wants ./ or / +regsub {^(?!/|\./)} $socktmp {./} socktmp ;# dgram-socket wants ./ or / proc prefix_preload {lib} { prefix_some_path LD_PRELOAD $lib } set env(UDP_PRELOAD_DIR) $socktmp prefix_preload $builddir/stest/udp-preload.so +proc finish {estatus} { + puts stderr "FINISHING $estatus" + signal default SIGCHLD + global pidmap + foreach pid [array names pidmap] { + kill KILL $pid + } + exit $estatus +} + +proc reap {} { + global pidmap + #puts stderr REAPING + foreach pid [array names pidmap] { + set got [wait -nohang $pid] + if {![llength $got]} continue + set info $pidmap($pid) + unset pidmap($pid) + puts stderr "reaped $info: $got" + finish 1 + } +} + +signal -restart trap SIGCHLD { after idle reap } + proc udp-proxy {} { global socktmp udpsock set u $socktmp/udp