(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'sshd version with different protocol combinations'>)} spids: [7] ) ] ) (command.ShFunction name: check_version body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:version) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [24] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [28] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:banner) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<printf>} {(SQ )}) (C {(${ Id.VSub_Name SSHD)} {<-o>} {(DQ <'Protocol='> (${ Id.VSub_Name version))} {<-i>} {<-f>} {(${ Id.VSub_Name OBJ) <'/sshd_proxy'>} ) ] negated: F ) ) } spids: [32] ) ] ) (command.Case to_match: {(${ Id.VSub_Name banner)} arms: [ (case_arm pat_list: [{<SSH-1.99-> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:proto) op: assign_op.Equal rhs: {<199>} spids: [81] ) ] ) ] spids: [76 78 85 -1] ) (case_arm pat_list: [{<SSH-2.0-> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:proto) op: assign_op.Equal rhs: {<20>} spids: [93] ) ] ) ] spids: [88 90 97 -1] ) (case_arm pat_list: [{<SSH-1.5-> <Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:proto) op: assign_op.Equal rhs: {<15>} spids: [105] ) ] ) ] spids: [100 102 109 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:proto) op: assign_op.Equal rhs: {<0>} spids: [116] ) ] ) ] spids: [112 113 120 -1] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(${ Id.VSub_Name expect)} {<-ne>} {(${ Id.VSub_Name proto)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'wrong protocol version '> (${ Id.VSub_Name banner) <' for '> (${ Id.VSub_Name version) ) } ) ] spids: [126 143] ) ] ) ] ) ) (C {<check_version>} {<2>} {<20>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(command.Sentence child:(C {<ssh_version>} {<1>}) terminator:<Id.Op_Semi _>)] ) action: [ (C {<check_version>} {<2> <Id.Lit_Comma ','> <1>} {<199>}) (C {<check_version>} {<1> <Id.Lit_Comma ','> <2>} {<199>}) (C {<check_version>} {<1>} {<15>}) ] spids: [171 178] ) ] ) ] )