(List (FunctionDef err_exit [] (List (Com {[LIT_CHARS print]} {[LIT_CHARS -u2]} {[LIT_CHARS -n]} {[DQ [\ LIT_ESCAPED_CHAR "\\t"]]}) (Com {[LIT_CHARS print]} {[LIT_CHARS -u2]} {[LIT_CHARS -r]} {[VarSub Command] [LIT_OTHER "["] [VarSub 1] [LIT_OTHER "]"] [LIT_OTHER ":"]} {[DQ [VarSub @ transform_ops=[Slice {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 2]}} None]]]}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "Errors+="] [LIT_CHARS 1] =}) ) ) (Com {[LIT_CHARS alias]} {[LIT_VAR_LIKE "err_exit="] [SQ ] =}) (= scope= flags=0 words=[] bindings=[('Command', {[VarSub 0 transform_ops=[VS_UNARY_DPOUND {[LIT_CHARS "*"] [LIT_SLASH /]}]]})]) (Com {[LIT_CHARS integer]} {[LIT_VAR_LIKE "Errors="] [LIT_CHARS 0] =}) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('tmp', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -dt]})]})]) (List (Com {[LIT_CHARS err_exit]} {[LIT_CHARS mktemp]} {[LIT_CHARS -dt]} {[LIT_CHARS failed]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Com {[LIT_CHARS trap]} {[DQ [LIT_CHARS "cd /; rm -rf "][VarSub tmp]]} {[LIT_CHARS EXIT]}) (= scope= flags=0 words=[] bindings=[('pwd', {[VarSub PWD]})]) (Case to_match={[VarSub SHELL]}, pat_word_list=[[{[LIT_CHARS /] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"] [LIT_CHARS /] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (= scope= flags=0 words=[] bindings=[('SHELL', {[VarSub pwd] [LIT_CHARS /] [VarSub SHELL]})]) (= scope= flags=0 words=[] bindings=[('SHELL', {[ComSub (Com {[LIT_CHARS whence]} {[DQ [VarSub SHELL]]})]})]) ) (FunctionDef check_restricted [] (List (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[LIT_CHARS out]}) (Com {[LIT_CHARS rksh]} {[LIT_CHARS -c]} {[DQ [VarSub @]]} < (FilenameRedirectNode filename={[LIT_CHARS out]} "> 2), (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), > more_env=[('LC_MESSAGES', {[LIT_CHARS C]})] ) (Com {[LIT_CHARS grep]} {[LIT_CHARS restricted]} {[LIT_CHARS out]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) ) ) (AndOr OP_AND_IF (DBracket {B2 BINARY_STRING_NOT_EQUAL {[VarSub SHELL]} {[LIT_CHARS /] [LIT_OTHER "*"]}}) (= scope= flags=0 words=[] bindings=[('SHELL', {[VarSub pwd] [LIT_CHARS /] [VarSub SHELL]})]) ) (AndOr OP_OR_IF (Com {[LIT_CHARS cd]} {[VarSub tmp]}) (Com {[LIT_CHARS err_exit]} {[DQ [LIT_CHARS "cd "][VarSub tmp][LIT_CHARS " failed"]]}) ) (Com {[LIT_CHARS ln]} {[LIT_CHARS -s]} {[VarSub SHELL]} {[LIT_CHARS rksh]}) (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub PWD] [LIT_OTHER ":"] [VarSub PATH]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS rksh]} {[LIT_CHARS -c]} {[SQ ]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (DBracket {B2 BINARY_STRING_EQUAL {[ComSub (Com {[LIT_CHARS rksh]} {[LIT_CHARS -c]} {[SQ ]})]} {[LIT_CHARS hello]}}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS /bin/echo]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS ./echo]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ ]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ ]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ ]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ ]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ file">]}) (Com {[LIT_CHARS err_exit]} {[SQ file not restricted">]}) ) (Com < (FilenameRedirectNode filename={[LIT_CHARS empty]} "> 1), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[SQ empty">]}) (Com {[LIT_CHARS err_exit]} {[SQ file not restricted">]}) ) (Com {[LIT_CHARS print]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS script]} "> 1), > ) (Com {[LIT_CHARS chmod]} {[LIT_OTHER "+"] [LIT_CHARS x]} {[LIT_CHARS ./script]}) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS script]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS ./script]}) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS print]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS script]} "> 1), > ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS script]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS print]} {[SQ file">]} < (FilenameRedirectNode filename={[LIT_CHARS script]} "> 1), > ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS script]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS print]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS script]} "> 1), > ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[LIT_CHARS script]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS script]} "> 1), (HereDocRedirectNode here_end='!' do_expansion=True body_word={[DQ [LIT_CHARS "#! "][VarSub SHELL][LIT_CHARS "\n"][LIT_CHARS "print hello\n"]]} 0), > ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[SQ ]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (AndOr OP_OR_IF (Pipeline! (Com {[LIT_CHARS check_restricted]} {[SQ ]}) ) (Com {[LIT_CHARS err_exit]} {[SQ ]}) ) (For i [{[LIT_CHARS PATH]}, {[LIT_CHARS ENV]}, {[LIT_CHARS FPATH]}]) (AndOr OP_OR_IF (Com {[LIT_CHARS check_restricted]} {[DQ [LIT_CHARS "function foo { typeset "][VarSub i][LIT_CHARS "=foobar;};foo"]]}) (Com {[LIT_CHARS err_exit]} {[DQ [VarSub i][LIT_CHARS " can be changed in function by using typeset"]]}) ) ) (Com {[LIT_CHARS exit]} {[ArithSub {A3 AS_OP_QMARK {A2 AS_OP_LESS {A Atom NODE_ARITH_WORD {[VarSub Errors]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 125]}}} {A Atom NODE_ARITH_WORD {[VarSub Errors]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 125]}}}]}) )