# Tests for base package # Assumptions: # sed # # Not tested: # setting UID or GID # ipcdo # ipcrun # getpeereid.oops ipcserver \ -Pp -c 2 -Bbanner -v -Xx rules.cdb -l Local -b 2 \ $service/s $service/print >$service/log1 2>&1 & run1=$! sleep 2 echo '--- ipcclient prints usage message without enough arguments' ipcclient path; echo $? echo '--- ipcclient prints error message for nonexistent path' { ipcclient $service/nonexistentdir/client echo wrong 2>&1 echo $? } | sed 's=nonexistentdir/client: .*$=nonexistentdir/client: ...=' echo '--- ipcclient prints error message for nonsocket path' touch $service/nonsocket { ipcclient $service/nonsocket echo wrong 2>&1 echo $? } | sed 's=/nonsocket: .*$=/nonsocket: ...=' echo '--- ipcclient understands relative path' { ipcclient $service/socket echo wrong 2>&1 echo $? } | sed 's/connect to .*: .*/connect to ...: .../' echo '--- ipcclient prints error message with invalid path' ipcclient thislabelistoolongbecausetheunixdomainhasalimitofapproximatelyonehundredcharactersinasocketpathwhosebrightideawasittousevariablelengthaddressesinthefirstplacetheyshouldhaveknownbetter. echo wrong; echo $? echo '--- ipcserver prints usage message without enough arguments' ipcserver path; echo $? echo '--- ipcclient prints error message' { ipcclient $sockt echo wrong 2>&1 echo $? } | sed 's/connect to .*: .*/connect to ...: .../' echo '--- ipcclient -q does not print error message' ipcclient -q $sockt echo wrong; echo $? echo '--- ipcserver prints error message with unknown socket directory' { ipcserver $service/nonexistentdir/server echo wrong 2>&1 echo $? } | sed 's/bind: .*/bind: .../' echo '--- ipcserver prints error message with invalid socket name' ipcserver thislabelistoolongbecausetheunixdomainhasalimitofapproximatelyonehundredcharactersinasocketpathwhosebrightideawasittousevariablelengthaddressesinthefirstplacetheyshouldhaveknownbetter. echo wrong; echo $? echo '--- ipcserver sets basic environment variables' { ipcclient -l Local $socks sh -c 'cat <&6' echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" echo '--- ipcclient sets basic environment variables' { ipcclient $socks $service/cprint echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" echo '--- ipcclient understands -l' { ipcclient -l Local $socks $service/cprint echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" echo '--- ipcclient understands -p' { ipcclient -p $sockcs -l Local $socks sh -c 'cat <&6' echo $? } | { sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" } echo '--- ipcclient prints error message with used path' ipcclient -p $sockcs -l Local $socks echo wrong; echo $? echo '--- ipcclient -q does not print error message with used path' ipcclient -q -p $sockc -l Local echo wrong; echo $? echo '--- ipcclient -v works' { ipcclient -v -l Local $socks echo ok 2>&1 echo $? } | sed 's/connected to .*$/connected to .../' echo '--- ipcserver prints error message with used path' ipcserver -D -l Local $service/s echo wrong echo $? echo '--- ipccat works' ipccat $socks | grep -v 'IPCREMOTEE.ID' echo $? echo '--- ipcconnect works' echo "hello there" | ipcconnect $socks | grep -v 'IPCREMOTEE.ID' echo $? echo '--- ipcrules prints usage message without enough arguments' ipcrules test.cdb; echo $? echo '--- ipcrules prints error message if it cannot create tmp' echo 0.1:deny | ipcrules test.cdb /dev/nonexistent/tmp; echo $? echo '--- ipcrules prints error message if it cannot move tmp to cdb' echo 0.1:deny | ipcrules /dev/nonexistent/cdb $service/test.tmp; echo $? echo '--- ipcrules creates a cdb file' echo 0:deny | ipcrules $service/test.cdb $service/test.tmp; echo $? echo '--- ipcrulescheck sees deny' env IPCREMOTEEUID=0 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrulescheck does not apply deny to another user.group' env IPCREMOTEEUID=1 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrules replaces a cdb file' echo '0.1:allow,which=/first/ 0:allow,which="second" .1:allow,which=+third+ :allow,which==fourth=' | ipcrules $service/test.cdb $service/test.tmp; echo $? echo '--- ipcrulescheck finds rule with euid and egid' env IPCREMOTEEUID=0 IPCREMOTEEGID=1 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrulescheck finds rule with euid' env IPCREMOTEEUID=0 IPCREMOTEEGID=2 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrulescheck finds rule with egid' env IPCREMOTEEUID=2 IPCREMOTEEGID=1 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrulescheck finds default rule' env IPCREMOTEEUID=3 IPCREMOTEEGID=4 ipcrulescheck $service/test.cdb; echo $? echo '--- ipcrules handles comments, address ranges, multiple variables' echo '0-5:allow,which=/first/,where=/whatever/ # comment' | ipcrules $service/test.cdb $service/test.tmp; echo $? env IPCREMOTEEUID=0 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=1 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=2 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=3 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=4 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=5 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=6 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=7 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=8 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=9 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=10 ipcrulescheck $service/test.cdb echo '--- ipcrulescheck finds the proper rules in the proper order' echo '86.75:allow,which=/first/ 86.76:allow,which=/second/ 86:allow,which=/third/ .75:allow,which=/fourth/ .76:allow,which=/fifth/ :allow,which=/sixth/ 86.75,0.test:allow,which=/first,test/ 86.76,0.test:allow,which=/second,test/ 86,0.test:allow,which=/third,test/ .75,0.test:allow,which=/fourth,test/ .76,0.test:allow,which=/fifth,test/ ,0.test:allow,which=/sixth,test/ ' | ipcrules $service/test.cdb $service/test.tmp; echo $? env IPCREMOTEEUID=86 IPCREMOTEEGID=75 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=86 IPCREMOTEEGID=76 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=86 IPCREMOTEEGID=100 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=96 IPCREMOTEEGID=75 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=34 IPCREMOTEEGID=14 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=86 ipcrulescheck $service/test.cdb env IPCREMOTEEUID=96 ipcrulescheck $service/test.cdb env IPCREMOTEEGID=75 ipcrulescheck $service/test.cdb env IPCREMOTEEGID=14 ipcrulescheck $service/test.cdb env ipcrulescheck $service/test.cdb echo '--- ipcexecrulescheck finds the proper rules in the proper order' echo '86.75,0.test:allow,which=/first,test/ 86.76,0.test:allow,which=/second,test/ 86,0.test:allow,which=/third,test/ .75,0.test:allow,which=/fourth,test/ .76,0.test:allow,which=/fifth,test/ ,0.test:allow,which=/sixth,test/ ,0.echo:allow :deny ' | ipcrules $service/test.cdb $service/test.tmp; echo $? env IPCREMOTEEUID=86 IPCREMOTEEGID=75 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=86 IPCREMOTEEGID=76 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=86 IPCREMOTEEGID=100 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=96 IPCREMOTEEGID=75 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=34 IPCREMOTEEGID=14 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=34 IPCREMOTEEGID=14 IPCCOMMAND=notest ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=86 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEUID=96 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEGID=75 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCREMOTEEGID=14 IPCCOMMAND=test ipcexecrulescheck $service/test.cdb env IPCCOMMAND=test ipcexecrulescheck $service/test.cdb sleep 1 kill -TERM $run1 wait $run1 echo '--- ipcserver works with -P' ipcserver \ -P -c 2 -Bbanner -v -Xx rules.cdb -l Local -b 2 \ $service/s $service/print >>$service/log1 2>&1 & run1=$! sleep 1 { ipcclient -l Local $socks sh -c 'cat <&6' echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" sleep 1 kill -TERM $run1 wait $run1 echo '--- ipcserver prints proper messages' sed -e "s/:$testuid,$testgid/:UID,GID/" -e 's/ [0-9]* / x /' \ -e 's|from /[^:]*$|from x|' -e 's|Local /[^:]*:|Local x:|' \ -e 's/done [0-9]*$/done x/' \ < $service/log1 ipcserver \ -c 2 -Bipcexec -v -l Local -b 2 \ $service/s ./ipcexec $service/test.cdb >$service/log2 2>&1 & run2=$! sleep 2 echo '--- ipcexec works' echo '1:0,1:2,12:echo#hereur#,' | tr '#' '\000' \ | ipcexec $service/test.cdb echo '--- ipccommand works' ipcclient -l0 $socks ipccommand 0 echo 'hereur' sleep 1 kill -TERM $run2 wait $run2 echo '--- ipcserver prints proper messages' sed -e "s/:$testuid,$testgid/:UID,GID/" -e 's/ [0-9]* / x /' \ -e 's|from /[^:]*$|from x|' -e 's|Local /[^:]*:|Local x:|' \ -e 's|ok [^.]*\.[^,]*,0|x.x,0|' \ -e 's/done [0-9]*$/done x/' \ < $service/log2 ipcprint \ -Pp -c 1 -f .lock -Bipcprint -v -l Local -b 2 \ $service/s >$service/log3 2>&1 & run3=$! sleep 2 echo '--- ipcprint prints usage message without enough arguments' ipcprint; echo $? echo '--- ipcprint sets basic environment variables' { ipcclient -l Local $socks sh -c 'cat <&6' echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" echo '--- ipcprint exits when environment changes' { ipcclient -l Local $socks sh -c 'cat <&6' echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" sleep 1 kill -TERM $run3 wait $run3 echo '--- ipcprint works with -P' ipcprint \ -P -c 1 -f .lock -Bipcprint -v -l Local -b 2 \ $service/s >>$service/log3 2>&1 & run3=$! sleep 1 { ipcclient -l Local $socks sh -c 'cat <&6' echo $? } | sed -e "s/UID=$testuid\$/UID=UID/" -e "s/GID=$testgid\$/GID=GID/" sleep 1 kill -TERM $run3 wait $run3 echo '--- ipcprint prints proper messages' sed -e "s/:$testuid,$testgid/:UID,GID/" -e 's/ [0-9]* / x /' \ -e 's|from /[^:]*$|from x|' -e 's|Local /[^:]*:|Local x:|' \ -e 's/done [0-9]*$/done x/' \ < $service/log3