(CommandList children: [ (FuncDef name: err body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$quietflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [ {(echo)} {(${ VSub_Name THISCMD) (Lit_Other ':')} {(ERROR) (Lit_Other ':')} {($ VSub_Star '$*')} ] redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[119])] ) ] spids: [16777215 114] ) ] spids: [16777215 133] ) ] spids: [98] ) spids: [94 97] ) (FuncDef name: info body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$quietflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(${ VSub_Name THISCMD) (Lit_Other ':')} {(INFO) (Lit_Other ':')} {($ VSub_Star '$*')} ) ] spids: [16777215 167] ) ] spids: [16777215 183] ) ] spids: [151] ) spids: [147 150] ) (FuncDef name: get_nextuid body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_uid) op: Equal rhs: {($ VSub_Number '$1')} spids: [214] ) ] spids: [214] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_nextuid) op: Equal rhs: {(EmptyPart)} spids: [218] ) ] spids: [218] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_uid'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_nextuid) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(${ VSub_Name PWCMD)} {(usernext)}) (C {(cut)} {(-f1)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [240 255] ) ) } spids: [238] ) ] spids: [238] ) ] spids: [16777215 235] ) ] else_action: [ (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (SimpleCommand words: [{(${ VSub_Name PWCMD)} {(usershow)} {($ VSub_Name '$_uid')}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [279] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [283] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(DQ ($ VSub_QMark '$?'))} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_nextuid) op: Equal rhs: {($ VSub_Name '$_uid')} spids: [307] ) ] spids: [307] ) (ControlFlow token: <ControlFlow_Break break> ) ] spids: [16777215 304] ) ] spids: [16777215 314] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_uid) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$_uid')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [318 325] ) } spids: [317] ) ] spids: [317] ) ] spids: [268 328] ) ) ] spids: [259 331] ) (C {(echo)} {($ VSub_Name '$_nextuid')}) ] spids: [211] ) spids: [206 210] ) (FuncDef name: show_usage body: (BraceGroup children: [ (C {(echo)} {(DQ ('usage: ') (${ VSub_Name THISCMD) (' [options]'))}) (C {(echo)} {(DQ (' options may include:'))}) (C {(echo)} {(DQ (' -C\t\tsave to the configuration file only'))}) (C {(echo)} {(DQ (' -D\t\tdo not attempt to create the home directory'))}) (C {(echo)} {(DQ (' -E\t\tdisable this account after creation'))}) (C {(echo)} {(DQ (' -G\t\tadditional groups to add accounts to'))}) (C {(echo)} {(DQ (' -L\t\tlogin class of the user'))}) (C {(echo)} {(DQ (' -M\t\tfile permission for home directory'))}) (C {(echo)} {(DQ (' -N\t\tdo not read configuration file'))}) (C {(echo)} {(DQ (' -S\t\ta nonexistent shell is not an error'))}) (C {(echo)} {(DQ (' -d\t\thome directory'))}) (C {(echo)} {(DQ (' -f\t\tfile from which input will be received'))}) (C {(echo)} {(DQ (' -g\t\tdefault login group'))}) (C {(echo)} {(DQ (' -h\t\tdisplay this usage message'))}) (C {(echo)} {(DQ (' -k\t\tpath to skeleton home directory'))}) (C {(echo)} {(DQ (' -m\t\tuser welcome message file'))}) (C {(echo)} {(DQ (' -q\t\tabsolute minimal user feedback'))}) (C {(echo)} {(DQ (' -s\t\tshell'))}) (C {(echo)} {(DQ (' -u\t\tuid to start at'))}) (C {(echo)} {(DQ (' -w\t\tpassword type: no, none, yes or random'))}) ] spids: [354] ) spids: [350 353] ) (FuncDef name: valid_shells body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_prefix) op:Equal rhs:{(EmptyPart)} spids:[522])] spids: [522] ) (Pipeline children: [ (C {(cat)} {(${ VSub_Name ETCSHELLS)}) (While cond: [(Sentence child:(C {(read)} {(_path)} {(_junk)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$_path')} arms: [ (case_arm pat_list: [ {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')} {(SQ )} ] spids: [554 559 562 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(echo)} {(-n)} { (DQ (${ VSub_Name _prefix) (CommandSubPart command_list: (CommandList children: [(C {(basename)} {($ VSub_Name '$_path')})] ) left_token: <Left_Backtick '`'> spids: [577 581] ) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prefix) op: Equal rhs: {(SQ <' '>)} spids: [585] ) ] spids: [585] ) ] spids: [565 566 591 16777215] ) ] spids: [547 551 594] ) ] spids: [544 597] ) ) ] negated: F ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-x)} {(DQ (${ VSub_Name NOLOGIN_PATH))} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ (' ') (${ VSub_Name NOLOGIN))}) ] ) ] spids: [519] ) spids: [515 518] ) (FuncDef name: fullpath_from_shell body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_shell) op: Equal rhs: {($ VSub_Number '$1')} spids: [655] ) ] spids: [655] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other ']')}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other '=')} {(DQ (${ VSub_Name NOLOGIN))} {(-o)} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other '=')} {(DQ (${ VSub_Name NOLOGIN_PATH))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(${ VSub_Name NOLOGIN_PATH)}) (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) terminator: <Op_Semi ';'> ) ] spids: [16777215 732] ) ] spids: [16777215 748] ) (Pipeline children: [ (C {(cat)} {(${ VSub_Name ETCSHELLS)}) (While cond: [(Sentence child:(C {(read)} {(_path)} {(_junk)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Name '$_path'))} arms: [ (case_arm pat_list: [ {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')} {(SQ )} ] spids: [783 788 791 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_path'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$_shell'))} {(-o)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(basename)} {($ VSub_Name '$_path')}) ] ) left_token: <Left_Backtick '`'> spids: [817 821] ) ) } {(Lit_Other '=')} {(DQ ($ VSub_Name '$_shell'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {($ VSub_Name '$_path')}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [16777215 833] ) ] spids: [16777215 846] ) ] spids: [794 795 849 16777215] ) ] spids: [774 780 852] ) ] spids: [771 855] ) ) ] negated: F ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [652] ) spids: [648 651] ) (FuncDef name: shell_exists body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_sh) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [894] ) ] spids: [894] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_shellchk) op: Equal rhs: { (DQ (${ VSub_Name GREPCMD) (" '^") ($ VSub_Name '$_sh') (Lit_Other '$') ("' ") (${ VSub_Name ETCSHELLS) (' > /dev/null 2>&1') ) } spids: [900] ) ] spids: [900] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(eval)} {($ VSub_Name '$_shellchk')})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_sh'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (${ VSub_Name NOLOGIN_PATH))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('Invalid shell (') ($ VSub_Name '$_sh') (') for user ') ($ VSub_Name '$username') (.) ) } ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] spids: [16777215 953] ) ] spids: [16777215 972] ) ] spids: [16777215 926] ) ] spids: [16777215 975] ) (AndOr ops: [Op_DAmp] children: [ (Pipeline children: [(C {(Lit_Other '[')} {(-x)} {(DQ ($ VSub_Name '$_sh'))} {(Lit_Other ']')})] negated: T ) (C {(info)} { (DQ ('The shell (') ($ VSub_Name '$_sh') (') does not exist or is not executable.')) } ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [891] ) spids: [887 890] ) (FuncDef name: save_config body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ('# Configuration file for adduser(8).'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1038] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('# NOTE: only *some* variables are saved.'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1051] ) ] ) (SimpleCommand words: [ {(echo)} { (DQ ('# Last Modified on ') (CommandSubPart command_list: (CommandList children:[(C {(${ VSub_Name DATECMD)})]) left_token: <Left_Backtick '`'> spids: [1062 1066] ) (.) ) } ] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1070] ) ] ) (SimpleCommand words: [{(echo)} {(SQ )}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1082] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('defaultHomePerm=') ($ VSub_Name '$uhomeperm'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1096] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('defaultLgroup=') ($ VSub_Name '$ulogingroup'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1110] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('defaultclass=') ($ VSub_Name '$uclass'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1124] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('defaultgroups=') ($ VSub_Name '$ugroups'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1138] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('passwdtype=') ($ VSub_Name '$passwdtype'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1152] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('homeprefix=') ($ VSub_Name '$homeprefix'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1166] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('defaultshell=') ($ VSub_Name '$ushell'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1180] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('udotdir=') ($ VSub_Name '$udotdir'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1194] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('msgfile=') ($ VSub_Name '$msgfile'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1208] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('disableflag=') ($ VSub_Name '$disableflag'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1222] ) ] ) (SimpleCommand words: [{(echo)} {(DQ ('uidstart=') ($ VSub_Name '$uidstart'))}] redirects: [ (Redir op_id: Redir_DGreat fd: 16777215 arg_word: {(${ VSub_Name ADDUSERCONF)} spids: [1236] ) ] ) ] spids: [1029] ) spids: [1025 1028] ) (FuncDef name: add_user body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(save_config)}) (ControlFlow token:<ControlFlow_Return return>)] spids: [16777215 1286] ) ] spids: [16777215 1295] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_uid) op:Equal rhs:{(EmptyPart)} spids:[1299])] spids: [1299] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_name) op:Equal rhs:{(EmptyPart)} spids:[1302])] spids: [1302] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_comment) op: Equal rhs: {(EmptyPart)} spids: [1305] ) ] spids: [1305] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_gecos) op:Equal rhs:{(EmptyPart)} spids:[1308])] spids: [1308] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_home) op:Equal rhs:{(EmptyPart)} spids:[1311])] spids: [1311] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_group) op:Equal rhs:{(EmptyPart)} spids:[1314])] spids: [1314] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_grouplist) op: Equal rhs: {(EmptyPart)} spids: [1317] ) ] spids: [1317] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_shell) op:Equal rhs:{(EmptyPart)} spids:[1320])] spids: [1320] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_class) op:Equal rhs:{(EmptyPart)} spids:[1323])] spids: [1323] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_dotdir) op: Equal rhs: {(EmptyPart)} spids: [1326] ) ] spids: [1326] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_expire) op: Equal rhs: {(EmptyPart)} spids: [1329] ) ] spids: [1329] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pwexpire) op: Equal rhs: {(EmptyPart)} spids: [1332] ) ] spids: [1332] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwd) op: Equal rhs: {(EmptyPart)} spids: [1335] ) ] spids: [1335] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_upasswd) op: Equal rhs: {(EmptyPart)} spids: [1338] ) ] spids: [1338] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwdmethod) op: Equal rhs: {(EmptyPart)} spids: [1341] ) ] spids: [1341] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_name) op: Equal rhs: {(DQ ("-n '") ($ VSub_Name '$username') ("'"))} spids: [1345] ) ] spids: [1345] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uuid'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_uid) op: Equal rhs: {(SQ <'-u "$uuid"'>)} spids: [1365] ) ] spids: [1365] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ulogingroup'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_group) op: Equal rhs: {(SQ <'-g "$ulogingroup"'>)} spids: [1383] ) ] spids: [1383] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ugroups'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_grouplist) op: Equal rhs: {(SQ <'-G "$ugroups"'>)} spids: [1401] ) ] spids: [1401] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ushell'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_shell) op: Equal rhs: {(SQ <'-s "$ushell"'>)} spids: [1419] ) ] spids: [1419] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uclass'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_class) op: Equal rhs: {(SQ <'-L "$uclass"'>)} spids: [1437] ) ] spids: [1437] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ugecos'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_comment) op: Equal rhs: {(SQ <'-c "$ugecos"'>)} spids: [1455] ) ] spids: [1455] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$udotdir'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_dotdir) op: Equal rhs: {(SQ <'-k "$udotdir"'>)} spids: [1473] ) ] spids: [1473] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uexpire'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_expire) op: Equal rhs: {(SQ <'-e "$uexpire"'>)} spids: [1491] ) ] spids: [1491] ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$upwexpire'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pwexpire) op: Equal rhs: {(SQ <'-p "$upwexpire"'>)} spids: [1509] ) ] spids: [1509] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$Dflag'))} {(-a)} {(-n)} {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$NOHOME'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_home) op: Equal rhs: {(SQ <'-d "$uhome"'>)} spids: [1567] ) ] spids: [1567] ) ] spids: [16777215 1564] ) ] else_action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uhomeperm'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_home) op: Equal rhs: {(SQ <'-m -d "$uhome" -M "$uhomeperm"'>)} spids: [1596] ) ] spids: [1596] ) ] spids: [16777215 1593] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_home) op: Equal rhs: {(SQ <'-m -d "$uhome"'>)} spids: [1605] ) ] spids: [1605] ) ] spids: [1602 1611] ) ] spids: [1573 1614] ) ] spids: [16777215 1536] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$Dflag'))} {(-a)} {(-n)} {(DQ ($ VSub_Name '$uhome'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_home) op: Equal rhs: {(SQ <'-d "$uhome"'>)} spids: [1641] ) ] spids: [1641] ) ] spids: [1617 1638] ) ] spids: [16777215 1647] ) (Case to_match: {($ VSub_Name '$passwdtype')} arms: [ (case_arm pat_list: [{(no)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwdmethod) op: Equal rhs: {(DQ ('-w no'))} spids: [1661] ) ] spids: [1661] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwd) op: Equal rhs: {(DQ ('-h -'))} spids: [1667] ) ] spids: [1667] ) ] spids: [1657 1658 1673 16777215] ) (case_arm pat_list: [{(yes)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwdmethod) op: Equal rhs: {(DQ ('-w yes'))} spids: [1704] ) ] spids: [1704] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwd) op: Equal rhs: {(DQ ('-h 0'))} spids: [1710] ) ] spids: [1710] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_upasswd) op: Equal rhs: {(SQ <'echo "$upass" |'>)} spids: [1716] ) ] spids: [1716] ) ] spids: [1676 1677 1722 16777215] ) (case_arm pat_list: [{(none)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwdmethod) op: Equal rhs: {(DQ ('-w none'))} spids: [1729] ) ] spids: [1729] ) ] spids: [1725 1726 1735 16777215] ) (case_arm pat_list: [{(random)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passwdmethod) op: Equal rhs: {(DQ ('-w random'))} spids: [1742] ) ] spids: [1742] ) ] spids: [1738 1739 1748 16777215] ) ] spids: [1650 1654 1751] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pwcmd) op: Equal rhs: { (DQ ($ VSub_Name '$_upasswd') (' ') (${ VSub_Name PWCMD) (' useradd ') ($ VSub_Name '$_uid') (' ') ($ VSub_Name '$_name') (' ') ($ VSub_Name '$_group') (' ') ($ VSub_Name '$_grouplist') (' ') ($ VSub_Name '$_comment') ) } spids: [1755] ) ] spids: [1755] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pwcmd) op: Equal rhs: { (DQ ($ VSub_Name '$_pwcmd') (' ') ($ VSub_Name '$_shell') (' ') ($ VSub_Name '$_class') (' ') ($ VSub_Name '$_home') (' ') ($ VSub_Name '$_dotdir') (' ') ($ VSub_Name '$_passwdmethod') (' ') ($ VSub_Name '$_passwd') ) } spids: [1775] ) ] spids: [1775] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pwcmd) op: Equal rhs: { (DQ ($ VSub_Name '$_pwcmd') (' ') ($ VSub_Name '$_expire') (' ') ($ VSub_Name '$_pwexpire') ) } spids: [1793] ) ] spids: [1793] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_output) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(eval)} {($ VSub_Name '$_pwcmd')})] ) left_token: <Left_Backtick '`'> spids: [1809 1813] ) } spids: [1808] ) ] spids: [1808] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} {(DQ ('There was an error adding user (') ($ VSub_Name '$username') (').'))} ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 1817] ) ] else_action: [ (C {(info)} { (DQ ('Successfully added (') ($ VSub_Name '$username') (') to the user database.')) } ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ (random))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$passwdtype'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:randompass) op: Equal rhs: {(DQ ($ VSub_Name '$_output'))} spids: [1866] ) ] spids: [1866] ) (C {(info)} { (DQ ('Password for (') ($ VSub_Name '$username') (') is: ') ($ VSub_Name '$randompass') ) } ) ] spids: [16777215 1863] ) ] spids: [16777215 1882] ) ] spids: [1834 1885] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$disableflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(${ VSub_Name PWCMD)} {(lock)} {($ VSub_Name '$username')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(info)} {(DQ ('Account (') ($ VSub_Name '$username') (') is locked.'))}) ] spids: [16777215 1917] ) ] else_action: [ (C {(info)} {(DQ ('Account (') ($ VSub_Name '$username') (') could NOT be locked.'))} ) ] spids: [1929 1941] ) ] spids: [16777215 1902] ) ] spids: [16777215 1944] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_line) op:Equal rhs:{(EmptyPart)} spids:[1948])] spids: [1948] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_owner) op:Equal rhs:{(EmptyPart)} spids:[1951])] spids: [1951] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_perms) op:Equal rhs:{(EmptyPart)} spids:[1954])] spids: [1954] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$msgflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$msgfile'))} {(Lit_Other ']')}) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_dir) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Name '$msgfile')})] ) left_token: <Left_Backtick '`'> spids: [2010 2014] ) ) } spids: [2008] ) ] spids: [2008] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_file) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(basename)} {($ VSub_Name '$msgfile')})] ) left_token: <Left_Backtick '`'> spids: [2020 2024] ) ) } spids: [2018] ) ] spids: [2018] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_perms) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(/usr/bin/find)} {($ VSub_Name '$_dir')} {(-name)} {($ VSub_Name '$_file')} {(-perm)} {(Lit_Other '+') (07022)} {(-prune)} ) ] ) left_token: <Left_Backtick '`'> spids: [2029 2044] ) } spids: [2028] ) ] spids: [2028] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_owner) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(/usr/bin/find)} {($ VSub_Name '$_dir')} {(-name)} {($ VSub_Name '$_file')} {(-user)} {(0)} {(-prune)} ) ] ) left_token: <Left_Backtick '`'> spids: [2048 2062] ) } spids: [2047] ) ] spids: [2047] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_owner'))} {(-o)} {(-n)} {(DQ ($ VSub_Name '$_perms'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} { (DQ ('The message file (') ($ VSub_Name '$msgfile') (') may be writeable only by root.') ) } ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] spids: [16777215 2086] ) ] spids: [16777215 2103] ) (Pipeline children: [ (C {(cat)} {(DQ ($ VSub_Name '$msgfile'))}) (While cond: [ (Sentence child: (C {(read)} {(_line)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [(C {(eval)} {(echo)} {(DQ ($ VSub_Name '$_line'))})] spids: [2123 2135] ) ) (C {(${ VSub_Name MAILCMD)} {(-s) (DQ (Welcome))} {(${ VSub_Name username)} ) ] negated: F ) (C {(info)} {(DQ ('Sent welcome message to (') ($ VSub_Name '$username') (').'))} ) ] spids: [1985] ) ] ) ] spids: [16777215 1970] ) ] spids: [16777215 2165] ) ] spids: [1261] ) spids: [1257 1260] ) (FuncDef name: get_user body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2198])] spids: [2198] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (ControlFlow token:<ControlFlow_Return return>) ] ) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(-n)} {(DQ ('Username: '))}) (C {(read)} {(_input)})] spids: [16777215 2244] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f1)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2266 2281] ) ) } spids: [2264] ) ] spids: [2264] ) ] spids: [2261 2285] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} {(DQ ('You must enter a username!'))}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')} ) (ControlFlow token: <ControlFlow_Continue continue> ) ] ) ] spids: [16777215 2318] ) ] spids: [16777215 2343] ) (SimpleCommand words: [{(${ VSub_Name PWCMD)} {(usershow)} {($ VSub_Name '$_input')}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [2354] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [2358] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_QMark '$?'))} {(-eq)} {(0)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(err)} {(DQ ('User exists!'))}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')} ) (ControlFlow token: <ControlFlow_Continue continue> ) ] ) ] spids: [16777215 2377] ) ] spids: [16777215 2402] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [2228 2408] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:username) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [2411] ) ] spids: [2411] ) ] spids: [2195] ) spids: [2191 2194] ) (FuncDef name: get_gecos body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2438])] spids: [2438] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (ControlFlow token:<ControlFlow_Return return>) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(-n)} {(DQ ('Full name: '))}) (C {(read)} {(_input)})] spids: [16777215 2475] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f7)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2497 2512] ) ) } spids: [2495] ) ] spids: [2495] ) ] spids: [2492 2516] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ugecos) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [2519] ) ] spids: [2519] ) ] spids: [2435] ) spids: [2431 2434] ) (FuncDef name: get_shell body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2549])] spids: [2549] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_fullpath) op: Equal rhs: {(EmptyPart)} spids: [2552] ) ] spids: [2552] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ushell) op: Equal rhs: {(DQ ($ VSub_Name '$defaultshell'))} spids: [2555] ) ] spids: [2555] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$Sflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [(C {(shell_exists)} {($ VSub_Name '$ushell')})] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(info)} {(DQ ('Using default shell ') (${ VSub_Name defaultshell) (.))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ushell) op: Equal rhs: {(DQ ($ VSub_Name '$defaultshell'))} spids: [2606] ) ] spids: [2606] ) ] spids: [16777215 2592] ) ] spids: [16777215 2612] ) ] spids: [16777215 2579] ) ] spids: [16777215 2615] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Shell (') ($ VSub_Name '$shells') (') [') (CommandSubPart command_list: (CommandList children: [(C {(basename)} {($ VSub_Name '$ushell')})] ) left_token: <Left_Backtick '`'> spids: [2643 2647] ) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [16777215 2632] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f9)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2662 2677] ) ) } spids: [2660] ) ] spids: [2660] ) ] spids: [2657 2681] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$Sflag'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ushell) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [2716] ) ] spids: [2716] ) ] spids: [16777215 2713] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_fullpath) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(fullpath_from_shell)} {($ VSub_Name '$_input')}) ] ) left_token: <Left_Backtick '`'> spids: [2726 2730] ) } spids: [2725] ) ] spids: [2725] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_fullpath'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ushell) op: Equal rhs: {(DQ ($ VSub_Name '$_fullpath'))} spids: [2749] ) ] spids: [2749] ) ] spids: [16777215 2746] ) ] else_action: [ (C {(err)} { (DQ ('Invalid shell (') ($ VSub_Name '$_input') (') for user ') ($ VSub_Name '$username') (.) ) } ) (C {(info)} {(DQ ('Using default shell ') (${ VSub_Name defaultshell) (.))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ushell) op: Equal rhs: {(DQ ($ VSub_Name '$defaultshell'))} spids: [2780] ) ] spids: [2780] ) ] spids: [2755 2786] ) ] spids: [2722 2789] ) ] spids: [16777215 2697] ) ] spids: [16777215 2792] ) ] spids: [2546] ) spids: [2542 2545] ) (FuncDef name: get_homedir body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2816])] spids: [2816] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Home directory [') (${ VSub_Name homeprefix) (/) (${ VSub_Name username) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [16777215 2832] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f8)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [2862 2877] ) ) } spids: [2860] ) ] spids: [2860] ) ] spids: [2857 2881] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uhome) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [2901] ) ] spids: [2901] ) (AndOr ops: [Op_DAmp Op_DPipe] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:homeprefix) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(dirname)} {($ VSub_Name '$uhome')})] ) left_token: <Left_Backtick '`'> spids: [2937 2941] ) ) } spids: [2935] ) ] spids: [2935] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:homeprefix) op: Equal rhs: {(DQ ($ VSub_Name '$uhome'))} spids: [2946] ) ] spids: [2946] ) ] ) ] spids: [16777215 2898] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uhome) op: Equal rhs: {(DQ (${ VSub_Name homeprefix) (/) (${ VSub_Name username))} spids: [2955] ) ] spids: [2955] ) ] spids: [2952 2967] ) ] spids: [2813] ) spids: [2809 2812] ) (FuncDef name: get_homeperm body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uhomeperm) op: Equal rhs: {($ VSub_Name '$defaultHomePerm')} spids: [2988] ) ] spids: [2988] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[2992])] spids: [2992] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(EmptyPart)} spids: [2995] ) ] spids: [2995] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uhomeperm'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(DQ ('Home directory permissions [') (${ VSub_Name uhomeperm) (']: '))} spids: [3015] ) ] spids: [3015] ) ] spids: [16777215 3012] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(DQ ('Home directory permissions (Leave empty for default): '))} spids: [3028] ) ] spids: [3028] ) ] spids: [3025 3034] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(-n)} {(DQ ($ VSub_Name '$_prompt'))}) (C {(read)} {(_input)})] spids: [16777215 3050] ) ] spids: [16777215 3067] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uhomeperm) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [3087] ) ] spids: [3087] ) ] spids: [16777215 3084] ) ] spids: [16777215 3093] ) ] spids: [2985] ) spids: [2981 2984] ) (FuncDef name: get_uid body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uuid) op: Equal rhs: {(${ VSub_Name uidstart)} spids: [3117] ) ] spids: [3117] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3123])] spids: [3123] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(EmptyPart)} spids: [3126] ) ] spids: [3126] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$uuid'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uuid) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_nextuid)} {($ VSub_Name '$uuid')})] ) left_token: <Left_Backtick '`'> spids: [3147 3151] ) } spids: [3146] ) ] spids: [3146] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(DQ ('Uid [') ($ VSub_Name '$uuid') (']: '))} spids: [3154] ) ] spids: [3154] ) ] spids: [16777215 3143] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_prompt) op: Equal rhs: {(DQ ('Uid (Leave empty for default): '))} spids: [3165] ) ] spids: [3165] ) ] spids: [3162 3171] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(-n)} {(DQ ($ VSub_Name '$_prompt'))}) (C {(read)} {(_input)})] spids: [16777215 3187] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f2)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [3209 3224] ) ) } spids: [3207] ) ] spids: [3207] ) ] spids: [3204 3228] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uuid) op: Equal rhs: {($ VSub_Name '$_input')} spids: [3244] ) ] spids: [3244] ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uuid) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_nextuid)} {($ VSub_Name '$uuid')})] ) left_token: <Left_Backtick '`'> spids: [3249 3253] ) } spids: [3248] ) ] spids: [3248] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uidstart) op: Equal rhs: {($ VSub_Name '$uuid')} spids: [3256] ) ] spids: [3256] ) ] spids: [3114] ) spids: [3110 3113] ) (FuncDef name: get_class body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uclass) op: Equal rhs: {(DQ ($ VSub_Name '$defaultclass'))} spids: [3278] ) ] spids: [3278] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3284])] spids: [3284] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_class) op: Equal rhs: { (BracedVarSub token: <VSub_Name uclass> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (default))}) spids: [3288 3294] ) } spids: [3287] ) ] spids: [3287] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(-n)} {(DQ ('Login class [') ($ VSub_Name '$_class') (']: '))}) (C {(read)} {(_input)}) ] spids: [16777215 3311] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f4)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [3335 3350] ) ) } spids: [3333] ) ] spids: [3333] ) ] spids: [3330 3354] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uclass) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [3370] ) ] spids: [3370] ) ] ) ] spids: [3275] ) spids: [3271 3274] ) (FuncDef name: get_logingroup body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ulogingroup) op: Equal rhs: {(DQ ($ VSub_Name '$defaultLgroup'))} spids: [3406] ) ] spids: [3406] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3412])] spids: [3412] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Login group [') (BracedVarSub token: <VSub_Name ulogingroup> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {($ VSub_Name '$username')} ) spids: [3438 3442] ) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [16777215 3429] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f3)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [3457 3472] ) ) } spids: [3455] ) ] spids: [3455] ) ] spids: [3452 3476] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ulogingroup) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [3496] ) ] spids: [3496] ) ] ) ] spids: [3403] ) spids: [3399 3402] ) (FuncDef name: get_groups body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ugroups) op: Equal rhs: {(DQ ($ VSub_Name '$defaultgroups'))} spids: [3523] ) ] spids: [3523] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_input) op:Equal rhs:{(EmptyPart)} spids:[3529])] spids: [3529] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_group) op: Equal rhs: { (BracedVarSub token: <VSub_Name ulogingroup> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(DQ (${ VSub_Name username))} ) spids: [3533 3541] ) } spids: [3532] ) ] spids: [3532] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) (C {(echo)} {(-n)} { (DQ ('Login group is ') ($ VSub_Name '$_group') ('. Invite ') ($ VSub_Name '$username') ) } ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ (' into other groups? [') ($ VSub_Name '$ugroups') (']: '))} ) ] ) ] spids: [16777215 3558] ) ] else_action: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) (C {(echo)} {(-n)} {(DQ ('Enter additional groups [') ($ VSub_Name '$ugroups') (']: '))} ) ] ) ] spids: [3608 3634] ) (C {(read)} {(_input)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ugroups) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [3655] ) ] spids: [3655] ) ] ) ] spids: [3520] ) spids: [3516 3519] ) (FuncDef name: get_expire_dates body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:upwexpire) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f5)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [3684 3699] ) ) } spids: [3682] ) ] spids: [3682] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uexpire) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name '$fileline'))}) (C {(cut)} {(-f6)} {(-d) (Lit_Other ':')}) ] negated: F ) ] ) left_token: <Left_Backtick '`'> spids: [3705 3720] ) ) } spids: [3703] ) ] spids: [3703] ) ] spids: [3679] ) spids: [3675 3678] ) (FuncDef name: get_password body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$savedpwtype'))} {(Lit_Other ']')}) (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {($ VSub_Name '$savedpwtype')} spids: [3784] ) ] spids: [3784] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:savedpwtype) op: Equal rhs: {(EmptyPart)} spids: [3788] ) ] spids: [3788] ) ] spids: [3781] ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:upass) op: Equal rhs: { (BracedVarSub token: <VSub_Name fileline> suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*:*:*:*:*:*:*:*:*:')}) spids: [3800 3804] ) } spids: [3799] ) ] spids: [3799] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$upass'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (Case to_match: {($ VSub_Name '$passwdtype')} arms: [ (case_arm pat_list: [{(yes)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(none)} spids: [3839] ) ] spids: [3839] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:savedpwtype) op: Equal rhs: {(yes)} spids: [3843] ) ] spids: [3843] ) ] spids: [3831 3832 3847 16777215] ) ] spids: [3824 3828 3850] ) ] spids: [16777215 3821] ) ] else_action: [ (Case to_match: {($ VSub_Name '$passwdtype')} arms: [ (case_arm pat_list: [{(random)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(yes)} spids: [3867] ) ] spids: [3867] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:savedpwtype) op: Equal rhs: {(random)} spids: [3871] ) ] spids: [3871] ) ] spids: [3863 3864 3875 16777215] ) ] spids: [3856 3860 3878] ) ] spids: [3853 3881] ) ] spids: [3754] ) spids: [3750 3753] ) (FuncDef name: input_from_file body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_field) op:Equal rhs:{(EmptyPart)} spids:[3905])] spids: [3905] ) (While cond: [(Sentence child:(C {(read)} {(-r)} {(fileline)}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (Case to_match: {(DQ ($ VSub_Name '$fileline'))} arms: [ (case_arm pat_list: [ {(EscapedLiteralPart token:<Lit_EscapedChar '\\#'>) (Lit_Other '*')} {(SQ )} ] spids: [3931 3936 3939 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (AndOr ops: [Op_DPipe] children: [ (C {(get_user)}) (ControlFlow token: <ControlFlow_Continue continue> ) ] ) (C {(get_gecos)}) (C {(get_uid)}) (C {(get_logingroup)}) (C {(get_class)}) (C {(get_shell)}) (C {(get_homedir)}) (C {(get_homeperm)}) (C {(get_password)}) (C {(get_expire_dates)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ugroups) op: Equal rhs: {(DQ ($ VSub_Name '$defaultgroups'))} spids: [3980] ) ] spids: [3980] ) (C {(add_user)}) ] spids: [3942 3943 3990 16777215] ) ] spids: [3922 3928 3993] ) ] spids: [3919 3996] ) ) ] spids: [3902] ) spids: [3898 3901] ) (FuncDef name: input_interactive body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_disable) op: Equal rhs: {(EmptyPart)} spids: [4020] ) ] spids: [4020] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_pass) op:Equal rhs:{(EmptyPart)} spids:[4023])] spids: [4023] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_passconfirm) op: Equal rhs: {(EmptyPart)} spids: [4026] ) ] spids: [4026] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:_random) op:Equal rhs:{(DQ (no))} spids:[4029])] spids: [4029] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_emptypass) op: Equal rhs: {(DQ (no))} spids: [4035] ) ] spids: [4035] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_usepass) op: Equal rhs: {(DQ (yes))} spids: [4041] ) ] spids: [4041] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_logingroup_ok) op: Equal rhs: {(DQ (no))} spids: [4047] ) ] spids: [4047] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_groups_ok) op: Equal rhs: {(DQ (no))} spids: [4053] ) ] spids: [4053] ) (Case to_match: {($ VSub_Name '$passwdtype')} arms: [ (case_arm pat_list: [{(none)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_emptypass) op: Equal rhs: {(DQ (yes))} spids: [4070] ) ] spids: [4070] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_usepass) op: Equal rhs: {(DQ (yes))} spids: [4076] ) ] spids: [4076] ) ] spids: [4066 4067 4082 16777215] ) (case_arm pat_list: [{(no)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_usepass) op: Equal rhs: {(DQ (no))} spids: [4089] ) ] spids: [4089] ) ] spids: [4085 4086 4095 16777215] ) (case_arm pat_list: [{(random)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_random) op: Equal rhs: {(DQ (yes))} spids: [4102] ) ] spids: [4102] ) ] spids: [4098 4099 4108 16777215] ) ] spids: [4059 4063 4111] ) (C {(get_user)}) (C {(get_gecos)}) (C {(get_uid)}) (Until cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_logingroup_ok'))} {(Lit_Other '=')} {(yes)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (C {(get_logingroup)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_logingroup_ok) op: Equal rhs: {(yes)} spids: [4154] ) ] spids: [4154] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$ulogingroup'))} {(-a)} {(DQ ($ VSub_Name '$username'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$ulogingroup'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [ {(${ VSub_Name PWCMD)} {(show)} {(group)} {($ VSub_Name '$ulogingroup')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [4201] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [4205] ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Group ') ($ VSub_Name '$ulogingroup') (' does not exist!') ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_logingroup_ok) op: Equal rhs: {(no)} spids: [4221] ) ] spids: [4221] ) ] spids: [16777215 4209] ) ] spids: [16777215 4225] ) ] spids: [16777215 4184] ) ] spids: [16777215 4228] ) ] spids: [4148 4231] ) ) (Until cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_groups_ok'))} {(Lit_Other '=')} {(yes)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (C {(get_groups)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_groups_ok) op: Equal rhs: {(yes)} spids: [4255] ) ] spids: [4255] ) (ForEach iter_name: i iter_words: [{($ VSub_Name '$ugroups')}] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$username'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$i'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children: [ (SimpleCommand words: [ {(${ VSub_Name PWCMD)} {(show)} {(group)} {($ VSub_Name '$i')} ] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [4306] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [4310] ) ] ) ] negated: T ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ('Group ') ($ VSub_Name '$i') (' does not exist!')) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_groups_ok) op: Equal rhs: {(no)} spids: [4326] ) ] spids: [4326] ) ] spids: [16777215 4314] ) ] spids: [16777215 4330] ) ] spids: [16777215 4289] ) ] spids: [16777215 4333] ) ] spids: [4268 4336] ) spids: [4264 4266] ) ] spids: [4249 4339] ) ) (C {(get_class)}) (C {(get_shell)}) (C {(get_homedir)}) (C {(get_homeperm)}) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Use password-based authentication? [') ($ VSub_Name '$_usepass') (']: ')) } ) (C {(read)} {(_input)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: {($ VSub_Name '$_usepass')} spids: [4393] ) ] spids: [4393] ) ] ) (Case to_match: {($ VSub_Name '$_input')} arms: [ (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')} {(Lit_Other '[') (Nn) (Lit_Other ']')} ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(DQ (no))} spids: [4417] ) ] spids: [4417] ) ] spids: [4404 4414 4423 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: [ (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Use an empty password? (yes/no) [') ($ VSub_Name '$_emptypass') (']: ') ) } ) (C {(read)} {(_input)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_emptypass) op: Equal rhs: {($ VSub_Name '$_input')} spids: [4486] ) ] spids: [4486] ) ] ) (Case to_match: {($ VSub_Name '$_emptypass')} arms: [ (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']') } {(Lit_Other '[') (Nn) (Lit_Other ']')} ] action: [ (C {(echo)} {(-n)} { (DQ ('Use a random password? (yes/no) [') ($ VSub_Name '$_random') (']: ') ) } ) (C {(read)} {(_input)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_random) op: Equal rhs: {(DQ ($ VSub_Name '$_input'))} spids: [4538] ) ] spids: [4538] ) ] ) (Case to_match: {($ VSub_Name '$_random')} arms: [ (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: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(DQ (random))} spids: [4574] ) ] spids: [4574] ) (ControlFlow token: <ControlFlow_Break break> ) ] spids: [4551 4571 4583 16777215] ) ] spids: [4544 4548 4586] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(DQ (yes))} spids: [4589] ) ] spids: [4589] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')} ) (ControlFlow token: <ControlFlow_Break break> ) ] ) (C {(trap)} {(SQ <'stty echo; exit'>)} {(0)} {(1)} {(2)} {(3)} {(15)} ) (C {(stty)} {(-echo)}) (C {(echo)} {(-n)} {(DQ ('Enter password: '))}) (C {(read)} {(-r)} {(upass)}) (C {(echo) (SQ )}) (C {(echo)} {(-n)} {(DQ ('Enter password again: '))}) (C {(read)} {(-r)} {(_passconfirm)}) (C {(echo)} {(SQ )}) (C {(stty)} {(echo)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$upass'))} {(-a)} {(-z)} {(DQ ($ VSub_Name '$_passconfirm'))} {(Lit_Other ']')} ) (ControlFlow token: <ControlFlow_Continue continue> ) ] ) ] spids: [4497 4507 4713 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: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {(DQ (none))} spids: [4739] ) ] spids: [4739] ) (Sentence child: (ControlFlow token:<ControlFlow_Break break>) terminator: <Op_Semi ';'> ) ] spids: [4716 4736 4749 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [4752 4753 4763 16777215] ) ] spids: [4490 4494 4766] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$upass'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$_passconfirm'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Passwords did not match!'))}) (ControlFlow token: <ControlFlow_Continue continue> ) ] spids: [16777215 4787] ) ] spids: [16777215 4800] ) (ControlFlow token: <ControlFlow_Break break> ) ] spids: [4455 4806] ) ) ] spids: [4426 4446 4809 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [4812 4813 4823 16777215] ) ] spids: [4397 4401 4826] ) (Sentence child: (ControlFlow token:<ControlFlow_Break break>) terminator: <Op_Semi ';'> ) ] spids: [4362 4833] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_disable) op: Equal rhs: { (BracedVarSub token: <VSub_Name disableflag> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (no))}) spids: [4837 4843] ) } spids: [4836] ) ] spids: [4836] ) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Lock out the account after creation? [') ($ VSub_Name '$_disable') (']: ') ) } ) (C {(read)} {(_input)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$_input'))} {(Lit_Other ']')}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_input) op: Equal rhs: {($ VSub_Name '$_disable')} spids: [4883] ) ] spids: [4883] ) ] ) (Case to_match: {($ VSub_Name '$_input')} arms: [ (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')} {(Lit_Other '[') (Nn) (Lit_Other ']')} ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:disableflag) op: Equal rhs: {(EmptyPart)} spids: [4907] ) ] spids: [4907] ) ] spids: [4894 4904 4910 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: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:disableflag) op: Equal rhs: {(yes)} spids: [4936] ) ] spids: [4936] ) ] spids: [4913 4933 4940 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [4943 4944 4954 16777215] ) ] spids: [4887 4891 4957] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [4852 4963] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_disable) op: Equal rhs: { (BracedVarSub token: <VSub_Name disableflag> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(DQ (no))}) spids: [4981 4987] ) } spids: [4980] ) ] spids: [4980] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(Username)} {($ VSub_Name '$username')} ) ] ) (Case to_match: {($ VSub_Name '$passwdtype')} arms: [ (case_arm pat_list: [{(yes)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pass) op: Equal rhs: {(SQ <'*****'>)} spids: [5026] ) ] spids: [5026] ) ] spids: [5022 5023 5032 16777215] ) (case_arm pat_list: [{(no)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pass) op: Equal rhs: {(SQ <'<disabled>'>)} spids: [5039] ) ] spids: [5039] ) ] spids: [5035 5036 5045 16777215] ) (case_arm pat_list: [{(none)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pass) op: Equal rhs: {(SQ <'<blank>'>)} spids: [5052] ) ] spids: [5052] ) ] spids: [5048 5049 5058 16777215] ) (case_arm pat_list: [{(random)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_pass) op: Equal rhs: {(SQ <'<random>'>)} spids: [5065] ) ] spids: [5065] ) ] spids: [5061 5062 5071 16777215] ) ] spids: [5015 5019 5074] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Password))} {(DQ ($ VSub_Name '$_pass'))} ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Pass Type'))} {(DQ ($ VSub_Name '$passwdtype'))} ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Full Name'))} {(DQ ($ VSub_Name '$ugecos'))} ) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')}) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Uid))} {(DQ ($ VSub_Name '$uuid'))} ) ] ) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Class))} {(DQ ($ VSub_Name '$uclass'))} ) (C {(printf)} {(DQ ('%-10s : %s %s') (Lit_Other '\\') (n))} {(DQ (Groups))} { (DQ (BracedVarSub token: <VSub_Name ulogingroup> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {($ VSub_Name '$username')} ) spids: [5223 5227] ) ) } {(DQ ($ VSub_Name '$ugroups'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Home))} {(DQ ($ VSub_Name '$uhome'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ ('Home Mode'))} {(DQ ($ VSub_Name '$uhomeperm'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Shell))} {(DQ ($ VSub_Name '$ushell'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Lit_Other '\\') (n))} {(DQ (Locked))} {(DQ ($ VSub_Name '$_disable'))} ) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (C {(echo)} {(-n)} {(DQ ('OK? (yes/no): '))}) (C {(read)} {(_input)}) (Case to_match: {($ VSub_Name '$_input')} 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: [5333 5343 5351 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: [(C {(add_user)})] spids: [5354 5374 5380 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [5383 5384 5390 16777215] ) ] spids: [5326 5330 5393] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [5309 5399] ) ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [4017] ) spids: [4013 4016] ) (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: [5414 5418] ) } spids: [5413] ) ] spids: [5413] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:DEFAULTSHELL) op:Equal rhs:{(/bin/sh)} spids:[5420])] spids: [5420] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ADDUSERCONF) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ADDUSERCONF> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /) (etc) (Lit_Slash /) (adduser.conf)} ) spids: [5425 5432] ) ) } spids: [5423] ) ] spids: [5423] ) (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: [5437 5446] ) ) } spids: [5435] ) ] spids: [5435] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:MAILCMD) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name MAILCMD> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(mail)}) spids: [5451 5455] ) ) } spids: [5449] ) ] spids: [5449] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ETCSHELLS) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name ETCSHELLS> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /) (etc) (Lit_Slash /) (shells)} ) spids: [5460 5467] ) ) } spids: [5458] ) ] spids: [5458] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:NOHOME) op:Equal rhs:{(DQ (/nonexistent))} spids:[5470])] spids: [5470] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:NOLOGIN) op:Equal rhs:{(DQ (nologin))} spids:[5475])] spids: [5475] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:NOLOGIN_PATH) op: Equal rhs: {(DQ (/usr/sbin/nologin))} spids: [5480] ) ] spids: [5480] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:GREPCMD) op: Equal rhs: {(DQ (/usr/bin/grep))} spids: [5485] ) ] spids: [5485] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:DATECMD) op:Equal rhs:{(DQ (/bin/date))} spids:[5490])] spids: [5490] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:username) op:Equal rhs:{(EmptyPart)} spids:[5502])] spids: [5502] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uuid) op:Equal rhs:{(EmptyPart)} spids:[5504])] spids: [5504] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uidstart) op:Equal rhs:{(EmptyPart)} spids:[5506])] spids: [5506] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ugecos) op:Equal rhs:{(EmptyPart)} spids:[5508])] spids: [5508] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ulogingroup) op:Equal rhs:{(EmptyPart)} spids:[5510])] spids: [5510] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uclass) op:Equal rhs:{(EmptyPart)} spids:[5512])] spids: [5512] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uhome) op:Equal rhs:{(EmptyPart)} spids:[5514])] spids: [5514] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uhomeperm) op:Equal rhs:{(EmptyPart)} spids:[5516])] spids: [5516] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:upass) op:Equal rhs:{(EmptyPart)} spids:[5518])] spids: [5518] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ushell) op:Equal rhs:{(EmptyPart)} spids:[5520])] spids: [5520] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:udotdir) op:Equal rhs:{(/usr/share/skel)} spids:[5522])] spids: [5522] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ugroups) op:Equal rhs:{(EmptyPart)} spids:[5525])] spids: [5525] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:uexpire) op:Equal rhs:{(EmptyPart)} spids:[5527])] spids: [5527] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:upwexpire) op:Equal rhs:{(EmptyPart)} spids:[5529])] spids: [5529] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:shells) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children:[(C {(valid_shells)})]) left_token: <Left_Backtick '`'> spids: [5533 5535] ) ) } spids: [5531] ) ] spids: [5531] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:passwdtype) op:Equal rhs:{(DQ (yes))} spids:[5538])] spids: [5538] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:msgfile) op:Equal rhs:{(/etc/adduser.msg)} spids:[5543])] spids: [5543] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:msgflag) op:Equal rhs:{(EmptyPart)} spids:[5546])] spids: [5546] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:quietflag) op:Equal rhs:{(EmptyPart)} spids:[5548])] spids: [5548] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:configflag) op:Equal rhs:{(EmptyPart)} spids:[5550])] spids: [5550] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:fflag) op:Equal rhs:{(EmptyPart)} spids:[5552])] spids: [5552] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:infile) op:Equal rhs:{(EmptyPart)} spids:[5554])] spids: [5554] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:disableflag) op:Equal rhs:{(EmptyPart)} spids:[5556])] spids: [5556] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:Dflag) op:Equal rhs:{(EmptyPart)} spids:[5558])] spids: [5558] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:Sflag) op:Equal rhs:{(EmptyPart)} spids:[5560])] spids: [5560] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:readconfig) op:Equal rhs:{(DQ (yes))} spids:[5562])] spids: [5562] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:homeprefix) op:Equal rhs:{(DQ (/home))} spids:[5567])] spids: [5567] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:randompass) op:Equal rhs:{(EmptyPart)} spids:[5572])] spids: [5572] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:fileline) op:Equal rhs:{(EmptyPart)} spids:[5574])] spids: [5574] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:savedpwtype) op:Equal rhs:{(EmptyPart)} spids:[5576])] spids: [5576] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:defaultclass) op:Equal rhs:{(EmptyPart)} spids:[5578])] spids: [5578] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:defaultLgroup) op:Equal rhs:{(EmptyPart)} spids:[5580])] spids: [5580] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:defaultgroups) op:Equal rhs:{(EmptyPart)} spids:[5582])] spids: [5582] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultshell) op: Equal rhs: {(DQ (${ VSub_Name DEFAULTSHELL))} spids: [5584] ) ] spids: [5584] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultHomePerm) op: Equal rhs: {(EmptyPart)} spids: [5591] ) ] spids: [5591] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:procowner) op: Equal rhs: { (BracedVarSub token: <VSub_Name procowner> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: { (CommandSubPart command_list: (CommandList children:[(C {(/usr/bin/id)} {(-u)})]) left_token: <Left_Backtick '`'> spids: [5610 5614] ) } ) spids: [5607 5615] ) } spids: [5606] ) ] spids: [5606] ) (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 the super-user (uid 0) to use this utility.'>)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] spids: [16777215 5635] ) ] spids: [16777215 5649] ) (ForEach iter_name: _i iter_words: [{($ VSub_Star '$*')}] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$_i'))} {(Lit_Other '=')} {(DQ (-N))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:readconfig) op: Equal rhs: {(EmptyPart)} spids: [5703] ) ] spids: [5703] ) (Sentence child: (ControlFlow token:<ControlFlow_Break break>) terminator: <Op_Semi ';'> ) ] spids: [16777215 5700] ) ] spids: [16777215 5710] ) ] spids: [5680 5712] ) spids: [5675 5678] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$readconfig'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (Subshell child: (SimpleCommand words: [{(.)} {(${ VSub_Name ADDUSERCONF)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [5748] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [5752] ) ] ) spids: [5740 5755] ) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-r)} {(${ VSub_Name ADDUSERCONF)} {(Lit_Other ']')}) (SimpleCommand words: [{(.)} {(${ VSub_Name ADDUSERCONF)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(/dev/null)} spids: [5779] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [5783] ) ] ) ] ) ] spids: [16777215 5758] ) ] spids: [16777215 5787] ) ] spids: [16777215 5727] ) ] spids: [16777215 5789] ) (ForEach iter_name: _switch do_arg_iter: T body: (DoGroup children: [ (Case to_match: {($ VSub_Name '$_switch')} arms: [ (case_arm pat_list: [{(-L)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultclass) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5819] ) ] spids: [5819] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5815 5816 5831 16777215] ) (case_arm pat_list: [{(-C)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:configflag) op: Equal rhs: {(yes)} spids: [5838] ) ] spids: [5838] ) (C {(shift)}) ] spids: [5834 5835 5845 16777215] ) (case_arm pat_list: [{(-D)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:Dflag) op: Equal rhs: {(yes)} spids: [5852] ) ] spids: [5852] ) (C {(shift)}) ] spids: [5848 5849 5859 16777215] ) (case_arm pat_list: [{(-E)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:disableflag) op: Equal rhs: {(yes)} spids: [5866] ) ] spids: [5866] ) (C {(shift)}) ] spids: [5862 5863 5873 16777215] ) (case_arm pat_list: [{(-k)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:udotdir) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5880] ) ] spids: [5880] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5876 5877 5892 16777215] ) (case_arm pat_list: [{(-f)}] action: [ (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Number '$2'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (-))} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:infile) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5916] ) ] spids: [5916] ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:fflag) op: Equal rhs: {(yes)} spids: [5922] ) ] spids: [5922] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5895 5896 5932 16777215] ) (case_arm pat_list: [{(-g)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultLgroup) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5939] ) ] spids: [5939] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5935 5936 5951 16777215] ) (case_arm pat_list: [{(-G)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultgroups) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5958] ) ] spids: [5958] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5954 5955 5970 16777215] ) (case_arm pat_list: [{(-h)}] action: [(C {(show_usage)}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})] spids: [5973 5974 5985 16777215] ) (case_arm pat_list: [{(-d)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:homeprefix) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [5992] ) ] spids: [5992] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [5988 5989 6004 16777215] ) (case_arm pat_list: [{(-m)}] action: [ (Case to_match: {(DQ ($ VSub_Number '$2'))} arms: [ (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')} ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:msgflag) op: Equal rhs: {(EmptyPart)} spids: [6029] ) ] spids: [6029] ) ] spids: [6020 6026 6032 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:msgflag) op: Equal rhs: {(yes)} spids: [6039] ) ] spids: [6039] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:msgfile) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [6043] ) ] spids: [6043] ) ] spids: [6035 6036 6049 16777215] ) ] spids: [6011 6017 6052] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [6007 6008 6061 16777215] ) (case_arm pat_list: [{(-M)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultHomePerm) op: Equal rhs: {($ VSub_Number '$2')} spids: [6068] ) ] spids: [6068] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [6064 6065 6078 16777215] ) (case_arm pat_list: [{(-N)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:readconfig) op: Equal rhs: {(EmptyPart)} spids: [6085] ) ] spids: [6085] ) (C {(shift)}) ] spids: [6081 6082 6091 16777215] ) (case_arm pat_list: [{(-w)}] action: [ (Case to_match: {(DQ ($ VSub_Number '$2'))} arms: [ (case_arm pat_list: [{(no)} {(none)} {(random)} {(yes)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:passwdtype) op: Equal rhs: {($ VSub_Number '$2')} spids: [6117] ) ] spids: [6117] ) ] spids: [6107 6114 6121 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (C {(show_usage)}) (ControlFlow token: <ControlFlow_Exit exit> arg_word: {(1)} ) ] spids: [6124 6125 6136 16777215] ) ] spids: [6098 6104 6139] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [6094 6095 6148 16777215] ) (case_arm pat_list: [{(-q)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:quietflag) op: Equal rhs: {(yes)} spids: [6155] ) ] spids: [6155] ) (C {(shift)}) ] spids: [6151 6152 6162 16777215] ) (case_arm pat_list: [{(-s)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:defaultshell) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(fullpath_from_shell)} {($ VSub_Number '$2')})] ) left_token: <Left_Backtick '`'> spids: [6171 6175] ) ) } spids: [6169] ) ] spids: [6169] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [6165 6166 6185 16777215] ) (case_arm pat_list: [{(-S)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:Sflag) op: Equal rhs: {(yes)} spids: [6192] ) ] spids: [6192] ) (C {(shift)}) ] spids: [6188 6189 6199 16777215] ) (case_arm pat_list: [{(-u)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uidstart) op: Equal rhs: {($ VSub_Number '$2')} spids: [6206] ) ] spids: [6206] ) (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>) (C {(shift)}) ] spids: [6202 6203 6216 16777215] ) ] spids: [5808 5812 6219] ) ] spids: [5805 6221] ) spids: [16777215 16777215] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$fflag'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$infile'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(input_from_file)})] spids: [16777215 6262] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ ($ VSub_Name '$infile'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-r)} {(DQ ($ VSub_Name '$infile'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [{(input_from_file)}] redirects: [ (Redir op_id: Redir_Less fd: 16777215 arg_word: {($ VSub_Name '$infile')} spids: [6302] ) ] ) ] spids: [16777215 6297] ) ] else_action: [ (C {(err)} { (DQ ('File (') ($ VSub_Name '$infile') (') is unreadable or does not exist.') ) } ) ] spids: [6307 6319] ) ] spids: [6268 6281] ) ] spids: [16777215 6322] ) ] spids: [16777215 6246] ) ] else_action: [ (C {(input_interactive)}) (While cond: [(Sentence child:(C {(Lit_Other ':')}) terminator:<Op_Semi ';'>)] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ ($ VSub_Name '$configflag'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(-n)} {(DQ ('Add another user? (yes/no): '))})] spids: [16777215 6352] ) ] else_action: [ (C {(echo)} {(-n)} {(DQ ('Re-edit the default configuration? (yes/no): '))}) ] spids: [6364 6376] ) (C {(read)} {(_input)}) (Case to_match: {($ VSub_Name '$_input')} arms: [ (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: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:uidstart) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_nextuid)} {($ VSub_Name '$uidstart')})] ) left_token: <Left_Backtick '`'> spids: [6415 6419] ) } spids: [6414] ) ] spids: [6414] ) (C {(input_interactive)}) (ControlFlow token:<ControlFlow_Continue continue>) ] spids: [6391 6411 6428 16777215] ) (case_arm pat_list: [ {(Lit_Other '[') (Nn) (Lit_Other ']') (Lit_Other '[') (Oo) (Lit_Other ']')} {(Lit_Other '[') (Nn) (Lit_Other ']')} ] action: [(C {(echo)} {(DQ ('Goodbye!'))})] spids: [6431 6441 6451 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [(ControlFlow token:<ControlFlow_Continue continue>)] spids: [6454 6455 6461 16777215] ) ] spids: [6384 6388 6464] ) (ControlFlow token:<ControlFlow_Break break>) ] spids: [6336 6470] ) ) ] spids: [6324 6472] ) ] )