(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tid) op: Equal rhs: {(DQ ('port number parsing'))} spids: [7] ) ] spids: [7] ) (FuncDef name: badport body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: {($ VSub_Number '$1')} spids: [20] ) ] spids: [20] ) (C {(verbose)} {(DQ ($ VSub_Name '$tid') (': invalid port ') ($ VSub_Name '$port'))}) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [ {(${ VSub_Name SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_proxy)} {(-p)} {($ VSub_Name '$port')} {(somehost)} {(true)} ] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [52] ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(fail)} {(DQ ($ VSub_Name '$tid') (' accepted invalid port ') ($ VSub_Name '$port'))} ) ] spids: [-1 57] ) ] spids: [-1 69] ) ] spids: [17] ) spids: [13 16] ) (FuncDef name: goodport body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:port) op: Equal rhs: {($ VSub_Number '$1')} spids: [80] ) ] spids: [80] ) (C {(verbose)} {(DQ ($ VSub_Name '$tid') (': valid port ') ($ VSub_Name '$port'))}) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [ {(${ VSub_Name SSH)} {(-F)} {($ VSub_Name '$OBJ') (/ssh_proxy)} {(-p)} {($ VSub_Name '$port')} {(somehost)} {(true)} ] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [112] ) ] ) terminator: <Op_Semi ';'> ) ] action: [(C {(Lit_Other ':')})] spids: [-1 117] ) ] else_action: [ (C {(fail)} {(DQ ($ VSub_Name '$tid') (' rejected valid port ') ($ VSub_Name '$port'))}) ] spids: [123 135] ) ] spids: [77] ) spids: [73 76] ) (C {(badport)} {(0)}) (C {(badport)} {(65536)}) (C {(badport)} {(131073)}) (C {(badport)} {(2000blah)}) (C {(badport)} {(blah2000)}) (C {(goodport)} {(1)}) (C {(goodport)} {(22)}) (C {(goodport)} {(2222)}) (C {(goodport)} {(22222)}) (C {(goodport)} {(65535)}) ] )