(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PATH='> name:PATH) op: assign_op.Equal rhs: {<'/bin'>} spids: [98] ) ] redirects: [] ) (command.ShFunction name: analyze body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Case to_match: { (DQ (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<ls>} {<-Lldn>} {($ Id.VSub_Number 1)}) right: <Id.Backtick_Right '`'> ) ) } arms: [ (case_arm pat_list: [ {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_Star '*'> } ] action: [ (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} {<group>} {<and>} {<world>} {<writable>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs) op: assign_op.Equal rhs: {<true>} spids: [163] ) ] redirects: [] ) ] spids: [130 141 166 -1] ) (case_arm pat_list: [ {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_Star '*'> } ] action: [ (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} {<world>} {<writable>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs) op: assign_op.Equal rhs: {<true>} spids: [198] ) ] redirects: [] ) ] spids: [169 180 201 -1] ) (case_arm pat_list: [ {<Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <w> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_QMark '?'> <Id.Lit_Star '*'> } ] action: [ (C {<echo>} {($ Id.VSub_Number 2) <Id.Lit_Colon ':'>} {($ Id.VSub_Number 1)} {<is>} {<group>} {<writable>} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs) op: assign_op.Equal rhs: {<true>} spids: [233] ) ] redirects: [] ) ] spids: [204 215 236 -1] ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: break_down body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ForEach iter_names: [j] iterable: (for_iter.Words words: [ { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {($ Id.VSub_Number 1)}) (C {<awk>} { (SQ <'{\n'> <'\t\t\tn = split($0, parts, "/");\n'> <'\t\t\tfor (i = n; i >= 2; i--){\n'> <'\t\t\t\tstring = "";\n'> <'\t\t\t\tfor (j = 2; j <= i; j++){\n'> <'\t\t\t\t\tstring = sprintf("%s/%s", string, parts[j]);\n'> <'\t\t\t\t}\n'> <'\t\t\t\tprint string\n'> <'\t\t\t}\n'> <'\t\t}'> ) } ) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } {(DQ <'/'>)} ] ) body: (command.DoGroup children: [(C {<analyze>} {($ Id.VSub_DollarName j)} {($ Id.VSub_Number 1)})] ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'config='> name:config) op: assign_op.Equal rhs: {<'/etc/mail/sendmail.cf'>} spids: [338] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'bogus_dirs='> name:bogus_dirs) op: assign_op.Equal rhs: {<false>} spids: [341] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'afl1='> name:afl1) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<grep>} {(DQ <'^OA'>)} {($ Id.VSub_DollarName config)}) (C {<sed>} {(SQ <'s/^OA//'>)}) (C {<sed>} {(SQ <'s/,/ /g'>)}) (C {<sed>} {(SQ <'s/.*://'>)}) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } spids: [345] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'afl2='> name:afl2) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<grep>} {(DQ <'^O AliasFile='>)} {($ Id.VSub_DollarName config)}) (C {<sed>} {(SQ <'s/^O AliasFile=//'>)}) (C {<sed>} {(SQ <'s/,/ /g'>)}) (C {<sed>} {(SQ <'s/.*://'>)}) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } spids: [382] ) ] redirects: [] ) (C {<break_down>} {($ Id.VSub_DollarName afl1)} {($ Id.VSub_DollarName afl2)}) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<sed>} {(SQ <'s/^[#].*$//'>)} {($ Id.VSub_DollarName afl1)} {($ Id.VSub_DollarName afl2)} ) (C {<grep>} {<Id.Lit_Colon ':'> <include> <Id.Lit_Colon ':'>}) (C {<sed>} {(SQ <'s/.*:include://'>)}) (C {<sed>} {(SQ <'s/,.*$//'>)}) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } ] ) body: (command.DoGroup children:[(C {<break_down>} {($ Id.VSub_DollarName i)})]) redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<id>}) (C {<nawk>} {<-F> (SQ <'('>)} {(SQ <'{n = split($2,id,")"); print id[1]}'>)} ) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } spids: [542] ) ] redirects: [] ) ] spids: [525 539] ) (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Number 1)} {<Id.Lit_Equals '='>} {(DQ <ALL>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg) op: assign_op.Equal rhs: {(DQ )} spids: [581] ) ] redirects: [] ) ] spids: [562 578] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'arg='> name:arg) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '*'))} spids: [588] ) ] redirects: [] ) ] redirects: [] ) (command.ForEach iter_names: [i] iterable: (for_iter.Words words: [ { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<getent>} {<passwd>} {($ Id.VSub_DollarName arg)}) (C {<nawk>} {<-F> <Id.Lit_Colon ':'>} {(SQ <'{print $6}'>)}) ] negated: F stderr_indices: [] ) right: <Id.Backtick_Right '`'> ) } ] ) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-f>} {($ Id.VSub_DollarName i) <'/.forward'>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<break_down>} {($ Id.VSub_DollarName i) <'/.forward'>})] spids: [626 639] ) ] else_action: [] redirects: [] ) ] ) redirects: [] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {($ Id.VSub_DollarName bogus_dirs)}) (C {<echo>} {(DQ <'No unsafe directories found.'>)}) ] ) ] )