(CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ATJOBDIR) op:Equal rhs:{(DQ (/var/at/jobs))} spids:[85])] spids: [85] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CRONJOBDIR) op: Equal rhs: {(DQ (/var/cron/tabs))} spids: [90] ) ] spids: [90] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:MAILSPOOL) op:Equal rhs:{(DQ (/var/mail))} spids:[95])] spids: [95] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:SIGKILL) op:Equal rhs:{(DQ (-KILL))} spids:[100])] spids: [100] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEMPDIRS) op: Equal rhs: {(DQ ('/tmp /var/tmp'))} spids: [105] ) ] spids: [105] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:THISCMD) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(/usr/bin/basename)} {($ VSub_Number '$0')})] ) left_token: <Left_Backtick '`'> spids: [111 115] ) } spids: [110] ) ] spids: [110] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PWCMD) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name PWCMD> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /) (usr) (Lit_Slash /) (sbin) (Lit_Slash /) (pw)} ) spids: [119 128] ) ) } spids: [117] ) ] spids: [117] ) (FuncDef name: err body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(${ VSub_Name THISCMD) (Lit_Other ':')} {($ VSub_Star '$*')}] redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[150])] ) ] spids: [145] ) spids: [141 144] ) (FuncDef name: verbose body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$vflag'))} {(Lit_Other ']')}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) ] spids: [176] ) spids: [172 175] ) (FuncDef name: rm_files body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [237] ) ] spids: [237] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:totalcount) op:Equal rhs:{(0)} spids:[246])] spids: [246] ) (ForEach iter_name: _dir iter_words: [{(${ VSub_Name TEMPDIRS)}] do_arg_iter: F body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filecount) op: Equal rhs: {(0)} spids: [265] ) ] spids: [265] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-d)} {($ VSub_Name '$_dir')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} {(DQ ($ VSub_Name '$_dir') (' is not a valid directory.'))}) (ControlFlow token: <ControlFlow_Continue continue> ) ] spids: [16777215 282] ) ] spids: [16777215 296] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} { (DQ ('Removing files owned by (') ($ VSub_Name '$login') (') in ') ($ VSub_Name '$_dir') (':') ) } ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:filecount) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (SimpleCommand words: [ {(find)} {(DQ ($ VSub_Name '$_dir'))} {(-user)} {(DQ ($ VSub_Name '$login'))} {(-delete)} {(-print)} ] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [320] ) ] ) (C {(wc)} {(-l)}) (C {(sed)} {(SQ <'s/ *//'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [317 351] ) } spids: [316] ) ] spids: [316] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(DQ (' ') ($ VSub_Name '$filecount') (' removed.'))}) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:totalcount) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$totalcount')}) right: (ArithWord w:{($ VSub_Name '$filecount')}) ) spids: [368 375] ) } spids: [367] ) ] spids: [367] ) ] spids: [262 378] ) spids: [255 260] ) (AndOr ops: [Op_DAmp Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(Lit_Other '[')} {($ VSub_Name '$totalcount')} {(-ne)} {(0)} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ (' files(') ($ VSub_Name '$totalcount') (')'))}) ] ) ] spids: [220] ) spids: [216 219] ) (FuncDef name: rm_mail body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [445] ) ] spids: [445] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing mail spool(s) for (') ($ VSub_Name '$login') ('):'))}) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-f)} {(${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' ') (${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login'))} ) (C {(echo)} {(-n)} {(DQ (' mailspool'))}) ] ) (C {(rm)} {(${ VSub_Name MAILSPOOL) (/) ($ VSub_Name '$login')}) ] spids: [16777215 484] ) ] spids: [16777215 525] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-f)} {(${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' ') (${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop))} ) (C {(echo)} {(-n)} {(DQ (' pop3'))}) ] ) (C {(rm)} {(${ VSub_Name MAILSPOOL) (/.) (${ VSub_Name login) (.pop)}) ] spids: [16777215 546] ) ] spids: [16777215 593] ) (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})]) ] spids: [428] ) spids: [424 427] ) (FuncDef name: kill_procs body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [639] ) ] spids: [639] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Terminating all processes owned by (') ($ VSub_Name '$login') ('):'))} ) ] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:killcount) op:Equal rhs:{(0)} spids:[663])] spids: [663] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:proclist) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (SimpleCommand words: [{(ps)} {(-U)} {($ VSub_Name '$login')}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [671] ) ] ) (C {(grep)} {(-v)} {(SQ <'^\\ *PID'>)}) (C {(awk)} {(SQ <'{print $1}'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [668 695] ) } spids: [667] ) ] spids: [667] ) (ForEach iter_name: _pid iter_words: [{($ VSub_Name '$proclist')}] do_arg_iter: F body: (DoGroup children: [ (SimpleCommand words: [{(kill)} {(${ VSub_Name SIGKILL)} {($ VSub_Name '$_pid')}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[713])] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:killcount) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$killcount')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [724 731] ) } spids: [723] ) ] spids: [723] ) ] spids: [708 734] ) spids: [703 706] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} { (DQ (' ') (${ VSub_Name SIGKILL) (' signal sent to ') ($ VSub_Name '$killcount') (' processes.') ) } ) ] ) (AndOr ops: [Op_DAmp Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(Lit_Other '[')} {($ VSub_Name '$killcount')} {(-ne)} {(0)} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ (' processes(') (${ VSub_Name killcount) (')'))}) ] ) ] spids: [622] ) spids: [618 621] ) (FuncDef name: rm_at_jobs body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [817] ) ] spids: [817] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:atjoblist) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [ {(find)} {(${ VSub_Name ATJOBDIR)} {(-maxdepth)} {(1)} {(-user)} {($ VSub_Name '$login')} {(-print)} ] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [830] ) ] ) ] ) left_token: <Left_Backtick '`'> spids: [827 846] ) } spids: [826] ) ] spids: [826] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:jobcount) op:Equal rhs:{(0)} spids:[849])] spids: [849] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing at(1) jobs owned by (') ($ VSub_Name '$login') ('):'))} ) ] ) (ForEach iter_name: _atjob iter_words: [{($ VSub_Name '$atjoblist')}] do_arg_iter: F body: (DoGroup children: [ (C {(rm)} {(-f)} {($ VSub_Name '$_atjob')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:jobcount) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$jobcount')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [889 896] ) } spids: [888] ) ] spids: [888] ) ] spids: [878 899] ) spids: [873 876] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(DQ (' ') ($ VSub_Name '$jobcount') (' removed.'))}) ] ) (AndOr ops: [Op_DAmp Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(Lit_Other '[')} {($ VSub_Name '$jobcount')} {(-ne)} {(0)} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ (' at(') ($ VSub_Name '$jobcount') (')'))}) ] ) ] spids: [800] ) spids: [796 799] ) (FuncDef name: rm_crontab body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [976] ) ] spids: [976] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing crontab for (') ($ VSub_Name '$login') ('):'))}) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-f)} {(${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login')} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' ') (${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login'))} ) (C {(echo)} {(-n)} {(DQ (' crontab'))}) ] ) (C {(rm)} {(-f)} {(${ VSub_Name CRONJOBDIR) (/) ($ VSub_Name '$login')}) ] spids: [16777215 1015] ) ] spids: [16777215 1057] ) (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})]) ] spids: [959] ) spids: [955 958] ) (FuncDef name: rm_ipc body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing IPC mechanisms'))})] ) (ForEach iter_name: i iter_words: [{(s)} {(m)} {(q)}] do_arg_iter: F body: (DoGroup children: [ (Pipeline children: [ (C {(ipcs)} {(-) ($ VSub_Name '$i')}) (C {(awk)} {(-v)} {(Lit_VarLike 'i=') ($ VSub_Name '$i')} {(-v)} {(Lit_VarLike 'login=') ($ VSub_Number '$1')} {(SQ <'$1 == i && $5 == login { print $2 }'>)} ) (C {(xargs)} {(-n)} {(1)} {(ipcrm)} {(-) ($ VSub_Name '$i')}) ] negated: F ) ] spids: [1115 1157] ) spids: [1107 1113] ) (AndOr ops:[Op_DAmp] children:[(C {(verbose)}) (C {(echo)} {(SQ <.>)})]) ] spids: [1086] ) spids: [1082 1085] ) (FuncDef name: rm_user body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {($ VSub_Number '$1')} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:login) op: Equal rhs: {($ VSub_Number '$1')} spids: [1221] ) ] spids: [1221] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ VSub_Name '$login') (')'))}) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$pw_rswitch'))} {(Lit_Other ']')}) (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' (including home directory)'))}) ] ) (AndOr ops: [Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(-n)} {(DQ (' home'))}) ] ) ] spids: [1257] ) ] ) (AndOr ops: [Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(-n)} {(DQ (' passwd'))}) ] ) (AndOr ops: [Op_DAmp] children: [(C {(verbose)}) (C {(echo)} {(-n)} {(DQ (' from the system:'))})] ) (C {(${ VSub_Name PWCMD)} {(userdel)} {(-n)} {($ VSub_Name '$login')} {($ VSub_Name '$pw_rswitch')} ) (AndOr ops: [Op_DAmp] children: [(C {(verbose)}) (C {(echo)} {(SQ <' Done.'>)})] ) ] spids: [1204] ) spids: [1200 1203] ) (FuncDef name: prompt_yesno body: (BraceGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Number '$1'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:msg) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [1383] ) ] spids: [1383] ) (ControlFlow token:<ControlFlow_Return return>) ] ) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (C {(echo)} {(-n)} {(DQ ($ VSub_Name '$msg'))}) (C {(read)} {(_ans)}) (Case to_match: {($ VSub_Name '$_ans')} arms: [ (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')} {(Lit_Other '[') (Nn) (Lit_Other ']')} ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(1)})] spids: [1424 1434 1442 16777215] ) (case_arm pat_list: [ {(Lit_Other '[') (Yy) (Lit_Other ']') (Lit_Other '[') (Ee) (Lit_Other ']') (Lit_Other '[') (Ss) (Lit_Other ']') } {(Lit_Other '[') (Yy) (Lit_Other ']') (Lit_Other '[') (Ee) (Lit_Other ']')} {(Lit_Other '[') (Yy) (Lit_Other ']')} ] action: [(ControlFlow token:<ControlFlow_Return return> arg_word:{(0)})] spids: [1445 1465 1473 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] spids: [1476 1477 1480 16777215] ) ] spids: [1417 1421 1483] ) ] spids: [1400 1486] ) ) ] spids: [1364] ) spids: [1360 1363] ) (FuncDef name: show_usage body: (BraceGroup children: [ (C {(echo)} {(DQ ('usage: ') (${ VSub_Name THISCMD) (' [-yv] [-f file] [user ...]'))}) (C {(echo)} {(DQ (' if the -y switch is used, either the -f switch or'))}) (C {(echo)} {(DQ (' one or more user names must be given'))}) ] spids: [1507] ) spids: [1503 1506] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ffile) op:Equal rhs:{(EmptyPart)} spids:[1541])] spids: [1541] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(EmptyPart)} spids:[1543])] spids: [1543] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:procowner) op:Equal rhs:{(EmptyPart)} spids:[1545])] spids: [1545] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:pw_rswitch) op:Equal rhs:{(EmptyPart)} spids:[1547])] spids: [1547] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:userlist) op:Equal rhs:{(EmptyPart)} spids:[1549])] spids: [1549] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:yflag) op:Equal rhs:{(EmptyPart)} spids:[1551])] spids: [1551] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:vflag) op:Equal rhs:{(EmptyPart)} spids:[1553])] spids: [1553] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:procowner) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(/usr/bin/id)} {(-u)})]) left_token: <Left_Backtick '`'> spids: [1557 1561] ) } spids: [1556] ) ] spids: [1556] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$procowner'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (0))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} {(SQ <'you must be root (0) to use this utility.'>)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 1581] ) ] spids: [16777215 1595] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:args) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(getopt)} {(yvf) (Lit_Other ':')} {($ VSub_Star '$*')}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [1602] ) ] ) ] ) left_token: <Left_Backtick '`'> spids: [1599 1609] ) } spids: [1598] ) ] spids: [1598] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (0))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})] spids: [16777215 1629] ) ] spids: [16777215 1639] ) (C {(set)} {(--)} {($ VSub_Name '$args')}) (ForEach iter_name: _switch do_arg_iter: T body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$_switch')} arms: [ (case_arm pat_list: [{(-y)}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:yflag) op:Equal rhs:{(1)} spids:[1667])] spids: [1667] ) (C {(shift)}) ] spids: [1663 1664 1674 16777215] ) (case_arm pat_list: [{(-v)}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:vflag) op:Equal rhs:{(1)} spids:[1681])] spids: [1681] ) (C {(shift)}) ] spids: [1677 1678 1688 16777215] ) (case_arm pat_list: [{(-f)}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(1)} spids:[1695])] spids: [1695] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ffile) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [1699] ) ] spids: [1699] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [1691 1692 1711 16777215] ) (case_arm pat_list: [{(--)}] action: [(C {(shift)}) (ControlFlow token:<ControlFlow_Break break>)] spids: [1714 1715 1724 16777215] ) ] spids: [1656 1660 1727] ) ] spids: [1653 1729] ) spids: [16777215 16777215] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$fflag')} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_insecure) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(find)} {($ VSub_Name '$ffile')} {(KW_Bang '!')} {(-user)} {(0)} {(-or)} {(-perm)} {(Lit_Other '+') (0022)} ) ] ) left_token: <Left_Backtick '`'> spids: [1757 1774] ) } spids: [1756] ) ] spids: [1756] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_insecure'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('file (') ($ VSub_Name '$ffile') (') must be owned by and writeable only by root.') ) } ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 1790] ) ] spids: [16777215 1807] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$ffile'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:userlist) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(cat)} {($ VSub_Name '$ffile')}) (While cond: [ (Sentence child: (C {(read)} {(_user)} {(_junk)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$_user')} arms: [ (case_arm pat_list: [ { (EscapedLiteralPart token: <Lit_EscapedChar '\\#'> ) (Lit_Other '*') } {(SQ )} ] spids: [1854 1859 1862 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(echo)} {(-n)} { (DQ ($ VSub_Name '$userlist') (' ') ($ VSub_Name '$_user') ) } ) ] spids: [1865 1866 1880 16777215] ) ] spids: [1847 1851 1883] ) ] spids: [1844 1886] ) ) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [1827 1887] ) } spids: [1826] ) ] spids: [1826] ) ] spids: [16777215 1823] ) ] spids: [16777215 1890] ) ] spids: [16777215 1753] ) ] else_action: [ (While cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Number '$1')} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:userlist) op: Equal rhs: {(DQ ($ VSub_Name '$userlist') (' ') ($ VSub_Number '$1'))} spids: [1908] ) ] spids: [1908] ) (C {(shift)}) ] spids: [1905 1919] ) ) ] spids: [1892 1921] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_Name '$userlist'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$fflag')} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('(') ($ VSub_Name '$ffile') (') does not exist or does not contain any user names.') ) } ) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 1961] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$yflag')} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})] spids: [1978 1987] ) ] else_action: [ (C {(echo)} {(-n)} {(DQ ('Please enter one or more usernames: '))}) (C {(read)} {(userlist)}) ] spids: [1998 2015] ) ] spids: [16777215 1949] ) ] spids: [16777215 2017] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_user) op:Equal rhs:{(EmptyPart)} spids:[2020])] spids: [2020] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_uid) op:Equal rhs:{(EmptyPart)} spids:[2022])] spids: [2022] ) (ForEach iter_name: _user iter_words: [{($ VSub_Name '$userlist')}] do_arg_iter: F body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:userrec) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(pw)} {(usershow)} {(-n)} {($ VSub_Name '$_user')}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(/dev/null)} spids: [2053] ) ] ) ] ) left_token: <Left_Backtick '`'> spids: [2050 2061] ) } spids: [2049] ) ] spids: [2049] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (0))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('user (') ($ VSub_Name '$_user') (') does not exist in the password database.') ) } ) (ControlFlow token:<ControlFlow_Continue continue>) ] spids: [16777215 2082] ) ] spids: [16777215 2097] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_uid) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$userrec')}) (C {(awk)} {(-F) (Lit_Other ':')} {(SQ <'{print $3}'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2101 2116] ) } spids: [2100] ) ] spids: [2100] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_uid'))} {(Lit_Other '=')} {(DQ (0))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('user (') ($ VSub_Name '$_user') (') has uid 0. You may not remove this user.') ) } ) (ControlFlow token:<ControlFlow_Continue continue>) ] spids: [16777215 2136] ) ] spids: [16777215 2151] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$yflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Matching password entry:'))}) (C {(echo)}) (C {(echo)} {($ VSub_Name '$userrec')}) (C {(echo)}) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (C {(prompt_yesno)} {(DQ ('Is this the entry you wish to remove? '))} ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [16777215 2213] ) ] spids: [16777215 2219] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_homedir) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$userrec')}) (C {(awk)} {(-F) (Lit_Other ':')} {(SQ <'{print $9}'>)}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2223 2238] ) } spids: [2222] ) ] spids: [2222] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(prompt_yesno)} { (DQ ("Remove user's home directory (") ($ VSub_Name '$_homedir') (')? ') ) } ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pw_rswitch) op: Equal rhs: {(DQ (-r))} spids: [2255] ) ] spids: [2255] ) ] spids: [16777215 2252] ) ] spids: [16777215 2261] ) ] spids: [16777215 2180] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:pw_rswitch) op: Equal rhs: {(DQ (-r))} spids: [2267] ) ] spids: [2267] ) ] spids: [2264 2273] ) (SimpleCommand words: [{(${ VSub_Name PWCMD)} {(lock)} {($ VSub_Name '$_user')}] redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[2285])] ) (AndOr ops: [Op_DAmp] children: [ (Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(-n)} {(DQ ('Removing user (') ($ VSub_Name '$_user') ('):'))}) ] ) (C {(rm_crontab)} {($ VSub_Name '$_user')}) (C {(rm_at_jobs)} {($ VSub_Name '$_user')}) (C {(rm_ipc)} {($ VSub_Name '$_user')}) (C {(kill_procs)} {($ VSub_Name '$_user')}) (C {(rm_files)} {($ VSub_Name '$_user')}) (C {(rm_mail)} {($ VSub_Name '$_user')}) (C {(rm_user)} {($ VSub_Name '$_user')}) (AndOr ops: [Op_DAmp] children: [(Pipeline children:[(C {(verbose)})] negated:T) (C {(echo)} {(DQ (.))})] ) ] spids: [2034 2370] ) spids: [2029 2032] ) ] )