(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tid) op: Equal rhs: {(DQ ('sshd version with different protocol combinations'))} spids: [7] ) ] spids: [7] ) (FuncDef name: check_version body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:version) op: Equal rhs: {($ VSub_Number '$1')} spids: [24] ) ] spids: [24] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expect) op: Equal rhs: {($ VSub_Number '$2')} spids: [28] ) ] spids: [28] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:banner) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(printf)} {(SQ )}) (C {(${ VSub_Name SSHD)} {(-o)} {(DQ ('Protocol=') (${ VSub_Name version))} {(-i)} {(-f)} {(${ VSub_Name OBJ) (/sshd_proxy)} ) ] negated: False ) ] ) left_token: <Left_Backtick '`'> spids: [33 62] ) } spids: [32] ) ] spids: [32] ) (Case to_match: {(${ VSub_Name banner)} arms: [ (case_arm pat_list: [{(SSH-1.99-) (Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:proto) op:Equal rhs:{(199)} spids:[79])] spids: [79] ) ] spids: [74 76 83 -1] ) (case_arm pat_list: [{(SSH-2.0-) (Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:proto) op:Equal rhs:{(20)} spids:[91])] spids: [91] ) ] spids: [86 88 95 -1] ) (case_arm pat_list: [{(SSH-1.5-) (Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:proto) op:Equal rhs:{(15)} spids:[103])] spids: [103] ) ] spids: [98 100 107 -1] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:proto) op:Equal rhs:{(0)} spids:[114])] spids: [114] ) ] spids: [110 111 118 -1] ) ] spids: [65 71 121] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(${ VSub_Name expect)} {(-ne)} {(${ VSub_Name proto)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(fail)} { (DQ ('wrong protocol version ') (${ VSub_Name banner) (' for ') (${ VSub_Name version) ) } ) ] spids: [-1 141] ) ] spids: [-1 158] ) ] spids: [21] ) spids: [16 20] ) (C {(check_version)} {(2)} {(20)}) (If arms: [ (if_arm cond: [(Sentence child:(C {(ssh_version)} {(1)}) terminator:<Op_Semi ';'>)] action: [ (C {(check_version)} {(2) (Lit_Comma ',') (1)} {(199)}) (C {(check_version)} {(1) (Lit_Comma ',') (2)} {(199)}) (C {(check_version)} {(1)} {(15)}) ] spids: [-1 176] ) ] spids: [-1 203] ) ] )