(List (Com {[LIT_CHARS set]} {[LIT_CHARS -e]} ) (= scope= flags=0 words=[] bindings=[('script_path', {[DQ [LIT_CHARS install.sh]]})]) (= scope= flags=0 words=[] bindings=[('test_dir', {[DQ ]})]) (= scope= flags=0 words=[] bindings=[('test_tpm', {[DQ [LIT_CHARS no]]})]) (= scope= flags=0 words=[] bindings=[('verbose', {[DQ [LIT_CHARS yes]]})]) (= scope= flags=0 words=[] bindings=[('test_guard', {[DQ [LIT_CHARS AllowAll]]})]) (For arg [{[DQ [VarSub @]]}]) (Case to_match={[DQ [VarSub arg]]}, pat_word_list=[[{[LIT_CHARS -notpm]}], [{[LIT_CHARS -tpm]}], [{[LIT_CHARS -acls]}], [{[LIT_CHARS -datalog]}], [{[LIT_CHARS -q]}], [{[LIT_CHARS -] [LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('test_tpm', {[DQ [LIT_CHARS no]]})]) (Com {[LIT_CHARS shift]} ) ) (List (= scope= flags=0 words=[] bindings=[('test_tpm', {[DQ [LIT_CHARS yes]]})]) (Com {[LIT_CHARS shift]} ) ) (List (= scope= flags=0 words=[] bindings=[('test_guard', {[DQ [LIT_CHARS ACLs]]})]) (Com {[LIT_CHARS shift]} ) ) (List (= scope= flags=0 words=[] bindings=[('test_guard', {[DQ [LIT_CHARS Datalog]]})]) (Com {[LIT_CHARS shift]} ) ) (List (= scope= flags=0 words=[] bindings=[('verbose', {[DQ [LIT_CHARS no]]})]) (Com {[LIT_CHARS shift]} ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Huh? "][VarSub arg]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub #]} {[LIT_CHARS -eq]} {[LIT_CHARS 1]} {[LIT_DBRACKET_LIKE "]"]} ) (= scope= flags=0 words=[] bindings=[('test_dir', {[DQ [VarSub 1]]})]) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[DQ [VarSub test_dir]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Usage: "][VarSub 0][LIT_CHARS " [options] "]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " Installs tao testing scripts into , which will be created"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " if it does not yet exist. If neither -acls nor -datalog is"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " specified, then the authorization policy is AllowAll."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Options:"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " -notpm Use a fake TPM (the default)."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " -tpm Use the TPM."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " -acls Use ACL-based guards for Tao domain policy."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " -datalog Use Datalog-based guards for Tao domain policy."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " -q Be more quiet."]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -e]} {[DQ [VarSub test_dir]]} {[LIT_CHARS -a]} {[LIT_OTHER "!"]} {[LIT_CHARS -d]} {[DQ [VarSub test_dir]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub test_dir][LIT_CHARS ": path exists but is not a directory"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub test_dir]]} ) (= scope= flags=0 words=[] bindings=[('root_dir', {[ComSub (Com {[LIT_CHARS readlink]} {[LIT_CHARS -e]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[VarSub 0]})]]})]})]) (= scope= flags=0 words=[] bindings=[('test_dir', {[ComSub (Com {[LIT_CHARS readlink]} {[LIT_CHARS -e]} {[DQ [VarSub test_dir]]})]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub verbose]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS yes]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Installing tao test scripts into: "][VarSub test_dir]]} ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -d]} {[DQ [VarSub GOPATH][LIT_CHARS /bin]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "install failed: could not find GOPATH bin directory"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub root_dir][LIT_CHARS /][VarSub script_path]]} {[LIT_CHARS -o]} {[LIT_OTHER "!"]} {[LIT_CHARS -d]} {[DQ [VarSub test_dir]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "install failed: could not canonicalize paths"]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub test_dir][LIT_CHARS /scripts]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub test_dir][LIT_CHARS /scripts/tao.sh]]} ) (Com {[LIT_CHARS sed]} {[SQ ]} {[DQ [VarSub root_dir][LIT_CHARS /][VarSub script_path]]} < (FilenameRedirectNode filename={[DQ [VarSub test_dir][LIT_CHARS /scripts/tao.sh]]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub test_dir][LIT_CHARS /scripts/tao.sh]]} ) (Com {[LIT_CHARS cd]} {[DQ [VarSub test_dir][LIT_CHARS /scripts/]]} ) (Com {[LIT_CHARS perl]} {[LIT_CHARS -p]} {[LIT_CHARS -i]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "s|^export TAO_TEST=undef .*"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "|export TAO_TEST="]] [\ LIT_ESCAPED_CHAR "\\\""] [DQ [VarSub test_dir]] [\ LIT_ESCAPED_CHAR "\\\""] [DQ [LIT_CHARS "|"]]} {[LIT_CHARS tao.sh]} ) (For script [{[DQ [LIT_CHARS setup.sh]]}, {[DQ [LIT_CHARS start.sh]]}, {[DQ [LIT_CHARS restart.sh]]}, {[DQ [LIT_CHARS monitor.sh]]}, {[DQ [LIT_CHARS test.sh]]}, {[DQ [LIT_CHARS refresh.sh]]}, {[DQ [LIT_CHARS stop.sh]]}, {[DQ [LIT_CHARS clean.sh]]}, {[DQ [LIT_CHARS hash.sh]]}, {[DQ [LIT_CHARS help.sh]]}, {[DQ [LIT_CHARS host.sh]]}, {[DQ [LIT_CHARS base64w-encode.sh]]}, {[DQ [LIT_CHARS base64w-decode.sh]]}]) (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub script]} ) (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[LIT_CHARS tao.sh]} {[VarSub script]} ) ) ) (Com {[LIT_CHARS cd]} {[DQ [VarSub test_dir]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS bin]} ) (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[VarSub GOPATH] [LIT_CHARS /bin]} {[LIT_CHARS bin]} ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS logs]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub test_tpm]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS yes]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('test_root', {[LIT_CHARS false]})]) (= scope= flags=0 words=[] bindings=[('test_stacked', {[LIT_CHARS true]})]) ) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('test_root', {[LIT_CHARS true]})]) (= scope= flags=0 words=[] bindings=[('test_stacked', {[LIT_CHARS false]})]) ) ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=True body_word={[DQ [LIT_CHARS "# Tao/CloudProxy environment variables"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_TEST="][RIGHT_D_QUOTE "\""][VarSub test_dir][RIGHT_D_QUOTE "\""][LIT_CHARS " # Also hardcoded into "][VarSub test_dir][LIT_CHARS "/scripts/*.sh\n"][LIT_CHARS "export TAO_ROOTDIR="][RIGHT_D_QUOTE "\""][VarSub root_dir][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_USE_TPM="][RIGHT_D_QUOTE "\""][VarSub test_tpm][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Flags for tao programs\n"][LIT_CHARS "export TAO_config_path="][RIGHT_D_QUOTE "\""][VarSub test_dir][LIT_CHARS /tao.config][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_guard="][RIGHT_D_QUOTE "\""][VarSub test_guard][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Flags for tao_admin\n"][LIT_CHARS "export TAO_ADMIN_pass="][RIGHT_D_QUOTE "\""][LIT_CHARS BogusPass][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Flags for linux_host\n"][LIT_CHARS "export TAO_HOST_pass="][RIGHT_D_QUOTE "\""][LIT_CHARS BogusPass][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_HOST_root="][RIGHT_D_QUOTE "\""][VarSub test_root][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_HOST_stacked="][RIGHT_D_QUOTE "\""][VarSub test_stacked][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export TAO_HOST_path="][RIGHT_D_QUOTE "\""][VarSub test_dir][LIT_CHARS /linux_tao_host][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Flags for glog\n"][LIT_CHARS "export GLOG_v=2\n"][LIT_CHARS "export GLOG_logtostderr="][RIGHT_D_QUOTE "\""][LIT_CHARS no][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export GLOG_alsologtostderr="][RIGHT_D_QUOTE "\""][LIT_CHARS no][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "export GLOG_stderrthreshold=3 # Only log FATAL to stderr.\n"][LIT_CHARS "export GLOG_log_dir="][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/logs"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# Misc.\n"][LIT_CHARS "export TAO_HOSTED_PROGRAMS="][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/demo \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/demo_server\n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/client \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/server \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/fclient \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/fserver \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/http_echo_server \n"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{TAO_TEST}/bin/https_echo_server \n"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "# BEGIN SETUP VARIABLES\n"][LIT_CHARS "# These variables come from "][VarSub test_dir][LIT_CHARS "/scripts/setup.sh\n"][LIT_CHARS "export GOOGLE_HOST_TAO="][RIGHT_D_QUOTE "\""][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "# END SETUP VARIABLES\n"]]} 0), (FilenameRedirectNode filename={[DQ [VarSub test_dir][LIT_CHARS /tao.env]]} "> 1), > ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub verbose]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS yes]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=True body_word={[DQ [LIT_CHARS "Done installing. \n"][LIT_CHARS " "][VarSub test_dir][LIT_CHARS "/bin # Link to "][VarSub GOPATH][LIT_CHARS "/bin.\n"][LIT_CHARS " "][VarSub test_dir][LIT_CHARS "/logs # Log files.\n"][LIT_CHARS " "][VarSub test_dir][LIT_CHARS "/scripts # Useful scripts.\n"][LIT_CHARS " "][VarSub test_dir][LIT_CHARS "/tao.env # Environment variables.\n"][LIT_CHARS "Typical next steps:\n"][LIT_CHARS " cd "][VarSub test_dir][LIT_CHARS "/\n"][LIT_CHARS " ./scripts/setup.sh # Create keys, hashes, ACLs, etc.\n"][LIT_CHARS " ./scripts/start.sh # Run Tao CA and Linux Tao server.\n"][LIT_CHARS " ./scripts/host.sh demo # Run a client/server demo test.\n"][LIT_CHARS " ./scripts/stop.sh # Kill all Tao programs.\n"][LIT_CHARS " ./scripts/refresh.sh # Refresh hashes, ACLs, etc.\n"][LIT_CHARS "Run "][VarSub test_dir][LIT_CHARS "/scripts/help.sh for more info.\n"]]} 0), > ) ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) (= scope= flags=1 words=[] bindings=[('TAO_TEST', {[LIT_CHARS undef]})]) (= scope= flags=0 words=[] bindings=[('tao_env', {[VarSub TAO_TEST] [LIT_CHARS /tao.env]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[VarSub tao_env]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Missing "][VarSub tao_env]]} ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS source]} {[VarSub tao_env]} ) (= scope= flags=0 words=[] bindings=[('PATH', {[DQ [VarSub TAO_TEST][LIT_CHARS "/bin:"][VarSub PATH]]})]) (= scope= flags=0 words=[] bindings=[('all_tao_progs', {[ComSub (List (Com {[LIT_CHARS cd]} {[VarSub TAO_TEST] [LIT_CHARS /bin]}) (Pipeline (Com {[LIT_CHARS echo]} {[LIT_OTHER "*"]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]}) (Com {[LIT_CHARS cat]}) ) )]})]) (= scope= flags=0 words=[] bindings=[('watchfiles', {[DQ [LIT_CHARS "bin/linux_host acls rules tao.config tao.env"]]})]) (FunctionDef extract_pid [] (List (= scope= flags=0 words=[] bindings=[('childname', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('pid', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[DQ [VarSub childname]]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub pid]]} ) ) ) (FunctionDef shortname [] (List (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS echo]} {[DQ [\ LIT_ESCAPED_CHAR "\\<"][VarSub name transform_ops=[Slice {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 15]}}]][\ LIT_ESCAPED_CHAR "\\>"]]} ) ) ) (FunctionDef showenv [] (Com {[LIT_CHARS cat]} {[VarSub tao_env]} ) ) (FunctionDef cleanup [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub TAO_TEST] [LIT_CHARS /logs/] [LIT_OTHER "*"]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub TAO_TEST] [LIT_CHARS /] [LIT_LBRACE "{"] [LIT_OTHER "*"] [LIT_CHARS keys] [LIT_COMMA ","] [LIT_CHARS linux_tao_host] [LIT_COMMA ","] [LIT_CHARS acls] [LIT_COMMA ","] [LIT_CHARS rules] [LIT_COMMA ","] [LIT_CHARS tao.config] [LIT_RBRACE "}"]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -i]} {[SQ ]} {[VarSub tao_env]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# BEGIN SETUP VARIABLES"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# These variables come from "][VarSub TAO_TEST][LIT_CHARS /scripts/setup.sh]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[SQ ]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# END SETUP VARIABLES"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Cleared all Tao configuration data"]]} ) ) ) (FunctionDef stoptests [] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Attempting graceful shutdown..."]]} ) (AndOr OP_OR_IF (Pipeline (Subshell (If (Com {[LIT_CHARS linux_host]} {[LIT_CHARS --shutdown]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[DQ [LIT_CHARS "^Aborted"][LIT_OTHER "$"]]} ) ) (Com {[LIT_CHARS true]} ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Checking for remaining Tao services and processes..."]]} ) (= scope= flags=0 words=[] bindings=[('killed', {[LIT_CHARS 0]})]) (For prog [{[VarSub all_tao_progs]}]) (If (Com {[LIT_CHARS pgrep]} {[LIT_CHARS -lx]} {[ComSub (Com {[LIT_CHARS shortname]} {[DQ [VarSub prog]]})]} ) (List (Com {[LIT_CHARS pkill]} {[LIT_CHARS -x]} {[ComSub (Com {[LIT_CHARS shortname]} {[DQ [VarSub prog]]})]} ) (= scope= flags=0 words=[] bindings=[('killed', {[LIT_CHARS 1]})]) ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[VarSub killed]} {[LIT_CHARS -eq]} {[LIT_CHARS 1]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Attempted to kill remaining Tao services and processes"]]} ) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No Tao services or processes remaining"]]} ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub TAO_TEST] [LIT_CHARS /linux_tao_host/admin_socket]} {[VarSub TAO_TEST] [LIT_CHARS /] [LIT_OTHER "*"] [LIT_CHARS /] [LIT_OTHER "*"] [LIT_CHARS _socket]} ) ) ) (FunctionDef setup [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TAO_TEST] [LIT_CHARS /logs]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Creating TaoDomain keys and settings."]]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -create]} {[LIT_CHARS -name]} {[LIT_CHARS testing]} ) (Com {[LIT_CHARS sed]} {[LIT_CHARS -i]} {[SQ ]} {[VarSub tao_env]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# BEGIN SETUP VARIABLES"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# These variables come from "][VarSub TAO_TEST][LIT_CHARS /scripts/setup.sh]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub TAO_USE_TPM]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS yes]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Checking "][VarSub TAO_TEST][LIT_CHARS /tpm/aikblob]]} ) (= scope= flags=0 words=[] bindings=[('pcr17', {[ComSub (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -getpcr]} {[LIT_CHARS 17]})]})]) (= scope= flags=0 words=[] bindings=[('pcr18', {[ComSub (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -getpcr]} {[LIT_CHARS 18]})]})]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[VarSub TAO_TEST] [LIT_CHARS /tpm/aikblob]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Creating TPMTao AIK and settings."]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub TAO_TEST] [LIT_CHARS /tpm]} ) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[VarSub TAO_TEST] [LIT_CHARS /tpm]} ) (Com {[LIT_CHARS genaik]} {[LIT_CHARS --blob]} {[VarSub TAO_TEST] [LIT_CHARS /tpm/aikblob]} ) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Reusing existing TPMTao AIK."]]} ) ) (= scope= flags=1 words=[] bindings=[('GOOGLE_HOST_TAO', {[SQ ]})]) (= scope= flags=1 words=[] bindings=[('GOOGLE_TAO_PCRS', {[SQ ] [VarSub pcr17] [SQ ] [VarSub pcr18] [SQ ]})]) (= scope= flags=0 words=[] bindings=[('tprin', {[ComSub (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -aikblob]} {[VarSub TAO_TEST] [LIT_CHARS /tpm/aikblob]})]})]) (= scope= flags=1 words=[] bindings=[('GOOGLE_TAO_TPM', {[VarSub tprin]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "export GOOGLE_HOST_TAO='tao::TPMTao("][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "dir:tpm"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ")'"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "export GOOGLE_TAO_PCRS='PCRs("][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "17,18"][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ", "][\ LIT_ESCAPED_CHAR "\\\""][VarSub pcr17][LIT_CHARS ","][VarSub pcr18][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS ")'"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "export GOOGLE_TAO_TPM='"][VarSub tprin][LIT_CHARS "'"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Creating LinuxHost keys and settings."]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[VarSub TAOHOST_path]} ) (Com {[LIT_CHARS linux_host]} {[LIT_CHARS --create]} {[LIT_CHARS --show] [LIT_DBRACKET_LIKE "="] [LIT_CHARS false]} ) (Com {[LIT_CHARS linux_host]} {[LIT_CHARS --show]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# END SETUP VARIABLES"]]} < (FilenameRedirectNode filename={[VarSub tao_env]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS Refreshing]]} ) (Com {[LIT_CHARS refresh]} ) ) ) (FunctionDef refresh [] (List (Com {[LIT_CHARS source]} {[VarSub tao_env]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -clear]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub TAO_guard]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS Datalog]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[DQ [LIT_CHARS "(forall S: forall TPM: forall PCRs: TrustedPlatform(TPM) and TrustedKernelPCRs(PCRs) and Subprin(S, TPM, PCRs) implies TrustedOS(S))"]]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[DQ [LIT_CHARS "(forall P: forall OS: forall Hash: TrustedOS(OS) and TrustedProgramHash(Hash) and Subprin(P, OS, Hash) implies MemberProgram(P))"]]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[DQ [LIT_CHARS "(forall P: MemberProgram(P) implies Authorized(P, "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS Execute][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "))"]]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[DQ [LIT_CHARS "(forall Y: forall P: forall S: MemberProgram(P) and TrustedArgs(S) and Subprin(Y, P, S) implies Authorized(Y, "][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS Execute][\ LIT_ESCAPED_CHAR "\\\""][LIT_CHARS "))"]]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub TAO_USE_TPM]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS yes]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[SQ ] [VarSub GOOGLE_TAO_TPM] [SQ ]} ) (= scope= flags=0 words=[] bindings=[('trustedpcrs', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[SQ ] [VarSub GOOGLE_TAO_PCRS] [SQ ]}) (Com {[LIT_CHARS sed]} {[SQ ]}) (Com {[LIT_CHARS sed]} {[SQ ]}) )]})]) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[DQ [VarSub trustedpcrs]]} ) ) (ElseTrue) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[SQ ] [VarSub GOOGLE_TAO_LINUX] [SQ ]} ) ) (For prog [{[VarSub TAO_HOSTED_PROGRAMS]}]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub prog]]} {[LIT_DBRACKET_LIKE "]"]} ) (List (= scope= flags=0 words=[] bindings=[('proghash', {[ComSub (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -quiet]} {[LIT_CHARS -getprogramhash]} {[DQ [VarSub prog]]})]})]) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[SQ ] [VarSub proghash] [SQ ]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[SQ ] [VarSub prog] [SQ ]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -add]} {[SQ ] [VarSub prog] [SQ ]} ) ) ) ) ) (ElseTrue) (For prog [{[VarSub TAO_HOSTED_PROGRAMS]}]) (If (Com {[LIT_DBRACKET_LIKE "["]} {[LIT_CHARS -f]} {[DQ [VarSub prog]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -canexecute]} {[DQ [VarSub prog]]} ) ) ) ) (Com {[LIT_CHARS tao_admin]} {[LIT_CHARS -show]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Tao configuration is ready"]]} ) ) ) (FunctionDef startsvcs [] (If (Com {[LIT_CHARS pgrep]} {[LIT_CHARS -x]} {[ComSub (Com {[LIT_CHARS shortname]} {[LIT_CHARS linux_host]})]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "LinuxHost service already running"]]} ) (ElseTrue) (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[VarSub TAO_TEST] [LIT_CHARS /linux_tao_host/admin_socket]} ) (Fork (Com {[LIT_CHARS linux_host]} {[LIT_CHARS --service]} ) ) ) ) ) (FunctionDef monitor [] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Monitoring Tao files..."]]} ) (Subshell (List (Com {[LIT_CHARS cd]} {[VarSub TAO_TEST]} ) (While (Com {[LIT_CHARS true]} ) (List (Com {[LIT_CHARS inotifywait]} {[LIT_CHARS -e]} {[LIT_CHARS modify]} {[LIT_CHARS -e]} {[LIT_CHARS delete]} {[LIT_CHARS -e]} {[LIT_CHARS attrib]} {[VarSub watchfiles]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Files have changed, waiting for quiet..."]]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (While (Com {[LIT_CHARS inotifywait]} {[LIT_CHARS -t]} {[LIT_CHARS 3]} {[LIT_CHARS -e]} {[LIT_CHARS modify]} {[LIT_CHARS -e]} {[LIT_CHARS delete]} {[LIT_CHARS -e]} {[LIT_CHARS attrib]} {[VarSub watchfiles]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Still waiting for quiet..."]]} ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Restarting Tao services..."]]} ) (Com {[LIT_CHARS refresh]} ) (Com {[LIT_CHARS stoptests]} ) (Com {[LIT_CHARS startsvcs]} ) ) ) ) ) ) ) (FunctionDef gethash [] (List (Pipeline (Com {[LIT_CHARS cat]} {[DQ [VarSub 1]]} ) (Com {[LIT_CHARS sha256sum]} ) (Com {[LIT_CHARS cut]} {[LIT_CHARS -d] [SQ ]} {[LIT_CHARS -f1]} ) (Com {[LIT_CHARS xxd]} {[LIT_CHARS -r]} {[LIT_CHARS -ps]} ) (Com {[LIT_CHARS base64]} ) (Com {[LIT_CHARS tr]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS tr]} {[LIT_CHARS -d]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS tr]} {[LIT_CHARS -d]} {[SQ flags=0 words=[] bindings=[('server_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS server]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (Com {[LIT_CHARS echo]} {[DQ [VarSub server_id]]} ) (= scope= flags=0 words=[] bindings=[('server_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub server_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /server.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('server_tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting cloudproxy client..."]]} ) (= scope= flags=0 words=[] bindings=[('client_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS client]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('client_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub client_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /client.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('client_tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Killing cloudproxy server and client..."]]} ) (Com {[LIT_CHARS kill]} {[VarSub server_pid]} {[VarSub client_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS kill]} {[VarSub server_tail_pid]} {[VarSub client_tail_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Clean cloudproxy file server data..."]]} ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS file_server_files/] [LIT_OTHER "*"]} {[LIT_CHARS file_server_meta/] [LIT_OTHER "*"]} {[LIT_CHARS file_client_files/] [LIT_OTHER "*"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "test data "][VarSub RANDOM]]} < (FilenameRedirectNode filename={[LIT_CHARS file_client_files/test]} >"> 1), > ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting cloudproxy file server..."]]} ) (= scope= flags=0 words=[] bindings=[('server_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS fserver]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('server_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub server_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /fserver.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('server_tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting cloudproxy file client..."]]} ) (= scope= flags=0 words=[] bindings=[('client_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS fclient]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('client_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub client_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /fclient.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('client_tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Killing cloudproxy file server and client..."]]} ) (Com {[LIT_CHARS kill]} {[VarSub server_pid]} {[VarSub client_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS kill]} {[VarSub server_tail_pid]} {[VarSub client_tail_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting cloudproxy http echo server..."]]} ) (= scope= flags=0 words=[] bindings=[('server_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS http_echo_server]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('server_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub server_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /http_echo_server.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (Com {[LIT_CHARS read]} {[LIT_CHARS -p]} {[DQ [LIT_CHARS "Press enter to kill http echo server..."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Killing cloudproxy http echo server..."]]} ) (Com {[LIT_CHARS kill]} {[VarSub server_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS kill]} {[VarSub tail_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting cloudproxy https echo server..."]]} ) (= scope= flags=0 words=[] bindings=[('server_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[LIT_CHARS https_echo_server]} {[LIT_CHARS --v] [LIT_DBRACKET_LIKE "="] [LIT_CHARS 2]})]})]) (= scope= flags=0 words=[] bindings=[('server_pid', {[ComSub (Com {[LIT_CHARS extract_pid]} {[VarSub server_id]})]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Fork (Com {[LIT_CHARS tail]} {[LIT_CHARS -f]} {[VarSub GLOG_log_dir] [LIT_CHARS /https_echo_server.INFO]} ) ) (= scope= flags=0 words=[] bindings=[('tail_pid', {[VarSub !]})]) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 1]} ) (Com {[LIT_CHARS read]} {[LIT_CHARS -p]} {[DQ [LIT_CHARS "Press enter to kill https echo server..."]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Killing cloudproxy https echo server..."]]} ) (Com {[LIT_CHARS kill]} {[VarSub server_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) (Com {[LIT_CHARS sleep]} {[LIT_CHARS 2]} ) (Com {[LIT_CHARS kill]} {[VarSub tail_pid]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Available test programs:"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " demo # a simple demo (run with host.sh)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " server # cloud client/server test (not ported yet)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " fserver # file client/server test (not ported yet)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " http # http echo test (not ported yet)"]]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " https # https echo test (not ported yet)"]]} ) ) ) ) ) (FunctionDef hostpgm [] (List (= scope= flags=0 words=[] bindings=[('prog', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Starting hosted program "][VarSub prog][LIT_CHARS " ..."]]} ) (= scope= flags=0 words=[] bindings=[('prog_id', {[ComSub (Com {[LIT_CHARS linux_host]} {[LIT_CHARS -run]} {[LIT_CHARS --]} {[DQ [VarSub prog]]} {[DQ [VarSub @]]})]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "TaoExtension: "][VarSub prog_id]]} ) ) ) (Case to_match={[DQ [ComSub (Com {[LIT_CHARS basename]} {[VarSub 0]})]]}, pat_word_list=[[{[LIT_CHARS setup.sh]}], [{[LIT_CHARS start.sh]}], [{[LIT_CHARS restart.sh]}], [{[LIT_CHARS monitor.sh]}], [{[LIT_CHARS test.sh]}], [{[LIT_CHARS host.sh]}], [{[LIT_CHARS refresh.sh]}], [{[LIT_CHARS stop.sh]}], [{[LIT_CHARS clean.sh]}], [{[LIT_CHARS hash.sh]}], [{[LIT_CHARS base64w-encode.sh]}], [{[LIT_CHARS base64w-decode.sh]}], [{[LIT_CHARS help]}, {[LIT_OTHER "*"]}]] (List (Com {[LIT_CHARS stoptests]} ) (Com {[LIT_CHARS cleanup]} ) (Com {[LIT_CHARS setup]} ) ) (Com {[LIT_CHARS startsvcs]} ) (List (Com {[LIT_CHARS stoptests]} ) (Com {[LIT_CHARS startsvcs]} ) ) (Com {[LIT_CHARS monitor]} ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub #]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS 0]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS testpgm]} {[LIT_CHARS help]} ) (ElseTrue) (For f [{[DQ [VarSub @]]}]) (Com {[LIT_CHARS testpgm]} {[VarSub f]} ) ) ) (If (Com {[LIT_DBRACKET_LIKE "["]} {[DQ [VarSub #]]} {[LIT_DBRACKET_LIKE "=="]} {[DQ [LIT_CHARS 0]]} {[LIT_DBRACKET_LIKE "]"]} ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "usage: "][VarSub 0][LIT_CHARS " [arg...]"]]} ) (ElseTrue) (Com {[LIT_CHARS hostpgm]} {[DQ [VarSub @]]} ) ) (Com {[LIT_CHARS refresh]} ) (Com {[LIT_CHARS stoptests]} ) (List (Com {[LIT_CHARS stoptests]} ) (Com {[LIT_CHARS cleanup]} ) ) (For f [{[DQ [VarSub @]]}]) (Com {[LIT_CHARS gethash]} {[VarSub f]} ) ) (For f [{[DQ [VarSub @]]}]) (Com {[LIT_CHARS base64wencode]} {[VarSub f]} ) ) (For f [{[DQ [VarSub @]]}]) (Com {[LIT_CHARS base64wdecode]} {[VarSub f]} ) ) (List (Com {[LIT_CHARS cat]} < (HereDocRedirectNode here_end='END' do_expansion=True body_word={[DQ [LIT_CHARS "Scripts in "][VarSub TAO_TEST][LIT_CHARS "/scripts:\n"][LIT_CHARS " setup.sh # Re-initialize all keys, whitelists, configuration, etc.\n"][LIT_CHARS " start.sh # Start Tao services.\n"][LIT_CHARS " restart.sh # Restart Tao services.\n"][LIT_CHARS " monitor.sh # Watch binaries and restart Tao services as needed.\n"][LIT_CHARS " test.sh ... # Run one or more cases. Use test.sh "][RIGHT_D_QUOTE "\""][LIT_CHARS help][RIGHT_D_QUOTE "\""][LIT_CHARS " for choices.\n"][LIT_CHARS " host.sh [arg...] # Run with arguments as hosted program.\n"][LIT_CHARS " refresh.sh # Refresh hashes and whitelists, but keep existing keys.\n"][LIT_CHARS " stop.sh # Kill processes, remove logs.\n"][LIT_CHARS " clean.sh # Remove all keys, configuration, logs, etc.\n"][LIT_CHARS " hash.sh [file...] # Hash files; use - for stdin.\n"][LIT_CHARS " base64w-*.sh [file...] # Encode/decode files; use - for stdin.\n"]]} 0), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]} ) ) ) )