(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TEXTDOMAIN='> name:TEXTDOMAIN) op: assign_op.Equal rhs: {<SUNW_OST_OSCMD>} spids: [31] ) ] redirects: [] ) (C {<export>} {<TEXTDOMAIN>}) (command.ShFunction name: list_princs body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Pipeline children: [ (C {<klist>} {<-k>} {($ Id.VSub_DollarName keytab)}) (C {<tail>} {<Id.Lit_Other '+'> <4>}) (C {<awk>} {(SQ <'{print $2}'>)}) (C {<sort>}) (C {<uniq>}) ] negated: F stderr_indices: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: set_command body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<x> ($ Id.VSub_DollarName command)} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {<x>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<cmd_error>} { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'Only one command can be specified'>)}) right: <Id.Backtick_Right '`'> ) } ) (C {<usage>}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [94 110] ) ] else_action: [] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'command='> name:command) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [137] ) ] redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: interactive_prompt body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName interactive)} {<Id.Lit_Equals '='>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [174 188] ) ] else_action: [] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'PROMPT='> name:PROMPT) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'%s for %s? [yes no] '>)}) right: <Id.Backtick_Right '`'> ) } spids: [199] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'Y1='> name:Y1) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <yes>)}) right: <Id.Backtick_Right '`'> ) } spids: [211] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'Y2='> name:Y2) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <Yes>)}) right: <Id.Backtick_Right '`'> ) } spids: [223] ) ] redirects: [] ) (C {<printf>} {(DQ ($ Id.VSub_DollarName PROMPT))} {(DQ ($ Id.VSub_Number 1))} {(DQ ($ Id.VSub_Number 2))} ) (C {<read>} {<ans>}) (command.Case to_match: {($ Id.VSub_DollarName ans)} arms: [ (case_arm pat_list: [{(${ Id.VSub_Name Y1)} {(${ Id.VSub_Name Y2)}] action: [(command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<0>})] spids: [262 269 277 -1] ) ] redirects: [] ) (command.ControlFlow token:<Id.ControlFlow_Return return> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: cmd_error body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple words: [{<echo>} {($ Id.VSub_At '@')}] redirects: [(redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})] more_env: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'USAGE='> name:USAGE) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} { (DQ <'Usage: '> ($ Id.VSub_Number 0) <' [-i] [-f file] list|change|delete|delold'> ) } ) right: <Id.Backtick_Right '`'> ) } spids: [317] ) ] redirects: [] ) (C {<echo>} {($ Id.VSub_DollarName USAGE)}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: change_key body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<list_princs>}) right: <Id.Backtick_Right '`'> ) } spids: [347] ) ] redirects: [] ) (command.ForEach iter_names: [princ] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}]) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'Change key'>)}) right: <Id.Backtick_Right '`'> ) } spids: [368] ) ] redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} {($ Id.VSub_DollarName princ)} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<kadmin>} {<-k>} {<-t>} {($ Id.VSub_DollarName keytab)} {<-p>} {($ Id.VSub_DollarName princ)} {<-q>} {(DQ <'ktadd -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ))} ) ] spids: [380 391] ) ] else_action: [] redirects: [] ) ] ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: delete_old_keys body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<list_princs>}) right: <Id.Backtick_Right '`'> ) } spids: [432] ) ] redirects: [] ) (command.ForEach iter_names: [princ] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}]) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'Delete old keys'>)}) right: <Id.Backtick_Right '`'> ) } spids: [453] ) ] redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} {($ Id.VSub_DollarName princ)} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<kadmin>} {<-k>} {<-t>} {($ Id.VSub_DollarName keytab)} {<-p>} {($ Id.VSub_DollarName princ)} {<-q>} {(DQ <'ktrem -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ) <' old'>)} ) ] spids: [465 476] ) ] else_action: [] redirects: [] ) ] ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name: delete_keys body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'interactive='> name:interactive) op: assign_op.Equal rhs: {<1>} spids: [518] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'princs='> name:princs) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<list_princs>}) right: <Id.Backtick_Right '`'> ) } spids: [522] ) ] redirects: [] ) (command.ForEach iter_names: [princ] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName princs)}]) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ACTION='> name:ACTION) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'Delete all keys'>)}) right: <Id.Backtick_Right '`'> ) } spids: [543] ) ] redirects: [] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<interactive_prompt>} {(DQ ($ Id.VSub_DollarName ACTION))} {($ Id.VSub_DollarName princ)} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<kadmin>} {<-p>} {($ Id.VSub_DollarName princ)} {<-k>} {<-t>} {($ Id.VSub_DollarName keytab)} {<-q>} {(DQ <'ktrem -k '> ($ Id.VSub_DollarName keytab) <' '> ($ Id.VSub_DollarName princ) <' all'>)} ) ] spids: [555 566] ) ] else_action: [] redirects: [] ) ] ) redirects: [] ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keytab='> name:keytab) op: assign_op.Equal rhs: {<'/etc/krb5/krb5.keytab'>} spids: [602] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'interactive='> name:interactive) op: assign_op.Equal rhs: {<0>} spids: [605] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CHANGE='> name:CHANGE) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <change>)}) right: <Id.Backtick_Right '`'> ) } spids: [609] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DELOLD='> name:DELOLD) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <delold>)}) right: <Id.Backtick_Right '`'> ) } spids: [620] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DELETE='> name:DELETE) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <delete>)}) right: <Id.Backtick_Right '`'> ) } spids: [631] ) ] redirects: [] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIST='> name:LIST) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <list>)}) right: <Id.Backtick_Right '`'> ) } spids: [642] ) ] redirects: [] ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] ) body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'opt='> name:opt) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [671] ) ] redirects: [] ) (C {<shift>}) (command.Case to_match: {($ Id.VSub_DollarName opt)} arms: [ (case_arm pat_list: [{(DQ <-f>)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keytab='> name:keytab) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} spids: [691] ) ] redirects: [] ) (C {<shift>}) ] spids: [685 688 698 -1] ) (case_arm pat_list: [{(DQ <-i>)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'interactive='> name: interactive ) op: assign_op.Equal rhs: {<1>} spids: [707] ) ] redirects: [] ) ] spids: [701 704 711 -1] ) (case_arm pat_list: [ {(${ Id.VSub_Name CHANGE)} {(${ Id.VSub_Name DELOLD)} {(${ Id.VSub_Name DELETE)} {(${ Id.VSub_Name LIST)} ] action: [(C {<set_command>} {($ Id.VSub_DollarName opt)})] spids: [714 729 737 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'ILLEGAL='> name:ILLEGAL) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<gettext>} {(DQ <'Illegal option: '>)}) right: <Id.Backtick_Right '`'> ) } spids: [744] ) ] redirects: [] ) (C {<cmd_error>} {($ Id.VSub_DollarName ILLEGAL)} {($ Id.VSub_DollarName opt)}) (C {<usage>}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [740 741 771 -1] ) ] redirects: [] ) ] ) redirects: [] ) (command.Case to_match: {($ Id.VSub_DollarName command)} arms: [ (case_arm pat_list: [{($ Id.VSub_DollarName CHANGE)}] action: [(C {<change_key>})] spids: [788 789 795 -1] ) (case_arm pat_list: [{($ Id.VSub_DollarName DELOLD)}] action: [(C {<delete_old_keys>})] spids: [798 799 805 -1] ) (case_arm pat_list: [{($ Id.VSub_DollarName DELETE)}] action: [(C {<delete_keys>})] spids: [808 809 815 -1] ) (case_arm pat_list: [{($ Id.VSub_DollarName LIST)}] action: [(C {<klist>} {<-k>} {($ Id.VSub_DollarName keytab)})] spids: [818 819 829 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<usage>})] spids: [832 833 839 -1] ) ] redirects: [] ) ] )