(command.CommandList children: [ (command.ShFunction name: err body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$quietflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:112) ) ] action: [ (command.Simple words: [ {(echo)} {(${ Id.VSub_Name THISCMD) (Id.Lit_Other ':')} {(ERROR) (Id.Lit_Other ':')} {($ Id.VSub_Star '$*')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'1>&' span_id:119) fd: 1 arg_word: {(2)} ) ] ) ] spids: [101 114] ) ] ) ] ) ) (command.ShFunction name: info body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$quietflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:165) ) ] action: [ (C {(echo)} {(${ Id.VSub_Name THISCMD) (Id.Lit_Other ':')} {(INFO) (Id.Lit_Other ':')} {($ Id.VSub_Star '$*')} ) ] spids: [154 167] ) ] ) ] ) ) (command.ShFunction name: get_nextuid body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_uid) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [214] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_nextuid) op: assign_op.Equal rhs: (word.Empty) spids: [218] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_uid'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:233) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_nextuid) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:240) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(${ Id.VSub_Name PWCMD)} {(usernext)}) (C {(cut)} {(-f1)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [238] ) ] ) ] spids: [222 235] ) ] else_action: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:264) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:268) ) ] body: (command.DoGroup children: [ (command.Simple words: [ {(${ Id.VSub_Name PWCMD)} {(usershow)} {($ Id.VSub_DollarName '$_uid')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:281) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:285) fd: 2 arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(DQ ($ Id.VSub_QMark '$?'))} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:304) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_nextuid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_uid')} spids: [309] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:313) ) ] spids: [289 306] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_uid) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$_uid')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [319] ) ] ) ] ) ) ] ) (C {(echo)} {($ Id.VSub_DollarName '$_nextuid')}) ] ) ) (command.ShFunction name: show_usage body: (command.BraceGroup children: [ (C {(echo)} {(DQ ('usage: ') (${ Id.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'))}) ] ) ) (command.ShFunction name: valid_shells body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prefix) op: assign_op.Equal rhs: (word.Empty) spids: [524] ) ] ) (command.Pipeline children: [ (C {(cat)} {(${ Id.VSub_Name ETCSHELLS)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:536) cond: [ (command.Sentence child: (C {(read)} {(_path)} {(_junk)}) terminator: (Token id:Id.Op_Semi val:';' span_id:544) ) ] body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$_path')} arms: [ (case_arm pat_list: [ { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\#' span_id:556) ) (Id.Lit_Star '*') } {(SQ )} ] spids: [556 561 564 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(echo)} {(-n)} { (DQ (${ Id.VSub_Name _prefix) (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:579) command_list: (command.CommandList children: [ (C {(basename)} {($ Id.VSub_DollarName '$_path')}) ] ) ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prefix) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:' ' span_id:591))} spids: [589] ) ] ) ] spids: [567 568 595 -1] ) ] ) ] ) ) ] negated: F ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-x)} {(DQ (${ Id.VSub_Name NOLOGIN_PATH))} {(Id.Lit_RBracket ']')} ) (C {(echo)} {(-n)} {(DQ (' ') (${ Id.VSub_Name NOLOGIN))}) ] ) ] ) ) (command.ShFunction name: fullpath_from_shell body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_shell) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [659] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_shell'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:675) arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_shell'))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name NOLOGIN))} {(-o)} {(DQ ($ Id.VSub_DollarName '$_shell'))} {(Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name NOLOGIN_PATH))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:734) ) ] action: [ (C {(echo)} {(${ Id.VSub_Name NOLOGIN_PATH)}) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:746) arg_word: {(0)} ) terminator: (Token id:Id.Op_Semi val:';' span_id:749) ) ] spids: [701 736] ) ] ) (command.Pipeline children: [ (C {(cat)} {(${ Id.VSub_Name ETCSHELLS)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:765) cond: [ (command.Sentence child: (C {(read)} {(_path)} {(_junk)}) terminator: (Token id:Id.Op_Semi val:';' span_id:773) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$_path'))} arms: [ (case_arm pat_list: [ { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\#' span_id:787) ) (Id.Lit_Star '*') } {(SQ )} ] spids: [787 792 795 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_path'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$_shell'))} {(-o)} { (DQ (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 821 ) command_list: (command.CommandList children: [ (C {(basename)} {($ Id.VSub_DollarName '$_path')} ) ] ) ) ) } {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$_shell'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:837) ) ] action: [ (C {(echo)} {($ Id.VSub_DollarName '$_path')}) (command.ControlFlow token: (Token id: Id.ControlFlow_Return val: return span_id: 847 ) arg_word: {(0)} ) ] spids: [802 839] ) ] ) ] spids: [798 799 855 -1] ) ] ) ] ) ) ] negated: F ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:865) arg_word: {(1)} ) ] ) ) (command.ShFunction name: shell_exists body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_sh) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [900] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_shellchk) op: assign_op.Equal rhs: { (DQ (${ Id.VSub_Name GREPCMD) (" '^") ($ Id.VSub_DollarName '$_sh') (Id.Lit_Other '$') ("' ") (${ Id.VSub_Name ETCSHELLS) (' > /dev/null 2>&1') ) } spids: [906] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(eval)} {($ Id.VSub_DollarName '$_shellchk')})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:930) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_sh'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (${ Id.VSub_Name NOLOGIN_PATH))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:957) ) ] action: [ (C {(err)} { (DQ ('Invalid shell (') ($ Id.VSub_DollarName '$_sh') (') for user ') ($ Id.VSub_DollarName '$username') (.) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:973) arg_word: {(1)} ) ] spids: [939 959] ) ] ) ] spids: [923 932] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(Id.Lit_LBracket '[')} {(-x)} {(DQ ($ Id.VSub_DollarName '$_sh'))} {(Id.Lit_RBracket ']')} ) ] negated: T ) (C {(info)} { (DQ ('The shell (') ($ Id.VSub_DollarName '$_sh') (') does not exist or is not executable.') ) } ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1009) arg_word: {(0)} ) ] ) ) (command.ShFunction name: save_config body: (command.BraceGroup children: [ (command.Simple words: [{(echo)} {(DQ ('# Configuration file for adduser(8).'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1044) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('# NOTE: only *some* variables are saved.'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1057) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ('# Last Modified on ') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:1068) command_list: (command.CommandList children:[(C {(${ Id.VSub_Name DATECMD)})]) ) (.) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1078) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(SQ )}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1090) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('defaultHomePerm=') ($ Id.VSub_DollarName '$uhomeperm'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1104) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('defaultLgroup=') ($ Id.VSub_DollarName '$ulogingroup'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1118) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('defaultclass=') ($ Id.VSub_DollarName '$uclass'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1132) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('defaultgroups=') ($ Id.VSub_DollarName '$ugroups'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1146) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('passwdtype=') ($ Id.VSub_DollarName '$passwdtype'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1160) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('homeprefix=') ($ Id.VSub_DollarName '$homeprefix'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1174) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('defaultshell=') ($ Id.VSub_DollarName '$ushell'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1188) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('udotdir=') ($ Id.VSub_DollarName '$udotdir'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1202) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('msgfile=') ($ Id.VSub_DollarName '$msgfile'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1216) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('disableflag=') ($ Id.VSub_DollarName '$disableflag'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1230) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) (command.Simple words: [{(echo)} {(DQ ('uidstart=') ($ Id.VSub_DollarName '$uidstart'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:1244) fd: -1 arg_word: {(${ Id.VSub_Name ADDUSERCONF)} ) ] ) ] ) ) (command.ShFunction name: add_user body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1292) ) ] action: [ (C {(save_config)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1300) ) ] spids: [1281 1294] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_uid) op: assign_op.Equal rhs: (word.Empty) spids: [1307] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_name) op: assign_op.Equal rhs: (word.Empty) spids: [1310] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_comment) op: assign_op.Equal rhs: (word.Empty) spids: [1313] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_gecos) op: assign_op.Equal rhs: (word.Empty) spids: [1316] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_home) op: assign_op.Equal rhs: (word.Empty) spids: [1319] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_group) op: assign_op.Equal rhs: (word.Empty) spids: [1322] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_grouplist) op: assign_op.Equal rhs: (word.Empty) spids: [1325] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_shell) op: assign_op.Equal rhs: (word.Empty) spids: [1328] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_class) op: assign_op.Equal rhs: (word.Empty) spids: [1331] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_dotdir) op: assign_op.Equal rhs: (word.Empty) spids: [1334] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_expire) op: assign_op.Equal rhs: (word.Empty) spids: [1337] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pwexpire) op: assign_op.Equal rhs: (word.Empty) spids: [1340] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwd) op: assign_op.Equal rhs: (word.Empty) spids: [1343] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_upasswd) op: assign_op.Equal rhs: (word.Empty) spids: [1346] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwdmethod) op: assign_op.Equal rhs: (word.Empty) spids: [1349] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_name) op: assign_op.Equal rhs: {(DQ ("-n '") ($ Id.VSub_DollarName '$username') ("'"))} spids: [1353] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uuid'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_uid) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-u "$uuid"' span_id:1375))} spids: [1373] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$ulogingroup'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_group) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-g "$ulogingroup"' span_id:1393))} spids: [1391] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$ugroups'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_grouplist) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-G "$ugroups"' span_id:1411))} spids: [1409] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$ushell'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_shell) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-s "$ushell"' span_id:1429))} spids: [1427] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uclass'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_class) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-L "$uclass"' span_id:1447))} spids: [1445] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$ugecos'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_comment) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-c "$ugecos"' span_id:1465))} spids: [1463] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$udotdir'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_dotdir) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-k "$udotdir"' span_id:1483))} spids: [1481] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uexpire'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_expire) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-e "$uexpire"' span_id:1501))} spids: [1499] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$upwexpire'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pwexpire) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-p "$upwexpire"' span_id:1519))} spids: [1517] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$Dflag'))} {(-a)} {(-n)} {(DQ ($ Id.VSub_DollarName '$uhome'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1542) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$uhome'))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$NOHOME'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1570) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_home) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-d "$uhome"' span_id:1577))} spids: [1575] ) ] ) ] spids: [1555 1572] ) ] else_action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uhomeperm'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1599) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_home) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: '-m -d "$uhome" -M "$uhomeperm"' span_id: 1606 ) ) } spids: [1604] ) ] ) ] spids: [1588 1601] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_home) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-m -d "$uhome"' span_id:1615))} spids: [1613] ) ] ) ] ) ] ) ] spids: [1523 1544] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$Dflag'))} {(-a)} {(-n)} {(DQ ($ Id.VSub_DollarName '$uhome'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1644) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_home) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'-d "$uhome"' span_id:1651))} spids: [1649] ) ] ) ] spids: [1625 1646] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$passwdtype')} arms: [ (case_arm pat_list: [{(no)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwdmethod) op: assign_op.Equal rhs: {(DQ ('-w no'))} spids: [1669] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwd) op: assign_op.Equal rhs: {(DQ ('-h -'))} spids: [1675] ) ] ) ] spids: [1665 1666 1681 -1] ) (case_arm pat_list: [{(yes)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwdmethod) op: assign_op.Equal rhs: {(DQ ('-w yes'))} spids: [1712] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwd) op: assign_op.Equal rhs: {(DQ ('-h 0'))} spids: [1718] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_upasswd) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'echo "$upass" |' span_id:1726))} spids: [1724] ) ] ) ] spids: [1684 1685 1730 -1] ) (case_arm pat_list: [{(none)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwdmethod) op: assign_op.Equal rhs: {(DQ ('-w none'))} spids: [1737] ) ] ) ] spids: [1733 1734 1743 -1] ) (case_arm pat_list: [{(random)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passwdmethod) op: assign_op.Equal rhs: {(DQ ('-w random'))} spids: [1750] ) ] ) ] spids: [1746 1747 1756 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pwcmd) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$_upasswd') (' ') (${ Id.VSub_Name PWCMD) (' useradd ') ($ Id.VSub_DollarName '$_uid') (' ') ($ Id.VSub_DollarName '$_name') (' ') ($ Id.VSub_DollarName '$_group') (' ') ($ Id.VSub_DollarName '$_grouplist') (' ') ($ Id.VSub_DollarName '$_comment') ) } spids: [1763] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pwcmd) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$_pwcmd') (' ') ($ Id.VSub_DollarName '$_shell') (' ') ($ Id.VSub_DollarName '$_class') (' ') ($ Id.VSub_DollarName '$_home') (' ') ($ Id.VSub_DollarName '$_dotdir') (' ') ($ Id.VSub_DollarName '$_passwdmethod') (' ') ($ Id.VSub_DollarName '$_passwd') ) } spids: [1783] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pwcmd) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$_pwcmd') (' ') ($ Id.VSub_DollarName '$_expire') (' ') ($ Id.VSub_DollarName '$_pwexpire') ) } spids: [1801] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_output) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:1817) command_list: (command.CommandList children: [(C {(eval)} {($ Id.VSub_DollarName '$_pwcmd')})] ) ) } spids: [1816] ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:1825) ) ] action: [ (C {(err)} { (DQ ('There was an error adding user (') ($ Id.VSub_DollarName '$username') (').') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:1839) arg_word: {(1)} ) ] spids: [1812 1827] ) ] else_action: [ (C {(info)} { (DQ ('Successfully added (') ($ Id.VSub_DollarName '$username') (') to the user database.') ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ (random))} {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$passwdtype'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1871) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:randompass) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_output'))} spids: [1876] ) ] ) (C {(info)} { (DQ ('Password for (') ($ Id.VSub_DollarName '$username') (') is: ') ($ Id.VSub_DollarName '$randompass') ) } ) ] spids: [1856 1873] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$disableflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1910) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(${ Id.VSub_Name PWCMD)} {(lock)} {($ Id.VSub_DollarName '$username')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1925) ) ] action: [ (C {(info)} {(DQ ('Account (') ($ Id.VSub_DollarName '$username') (') is locked.'))} ) ] spids: [1915 1927] ) ] else_action: [ (C {(info)} { (DQ ('Account (') ($ Id.VSub_DollarName '$username') (') could NOT be locked.') ) } ) ] ) ] spids: [1899 1912] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_line) op: assign_op.Equal rhs: (word.Empty) spids: [1958] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_owner) op: assign_op.Equal rhs: (word.Empty) spids: [1961] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_perms) op: assign_op.Equal rhs: (word.Empty) spids: [1964] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$msgflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:1978) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(DQ ($ Id.VSub_DollarName '$msgfile'))} {(Id.Lit_RBracket ']')} ) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_dir) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 2020 ) command_list: (command.CommandList children: [ (C {(dirname)} {($ Id.VSub_DollarName '$msgfile')}) ] ) ) ) } spids: [2018] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_file) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id: Id.Left_Backtick val: '`' span_id: 2032 ) command_list: (command.CommandList children: [ (C {(basename)} {($ Id.VSub_DollarName '$msgfile')}) ] ) ) ) } spids: [2030] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_perms) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2043) command_list: (command.CommandList children: [ (C {(/usr/bin/find)} {($ Id.VSub_DollarName '$_dir')} {(-name)} {($ Id.VSub_DollarName '$_file')} {(-perm)} {(Id.Lit_Other '+') (07022)} {(-prune)} ) ] ) ) } spids: [2042] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_owner) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2064) command_list: (command.CommandList children: [ (C {(/usr/bin/find)} {($ Id.VSub_DollarName '$_dir')} {(-name)} {($ Id.VSub_DollarName '$_file')} {(-user)} {(0)} {(-prune)} ) ] ) ) } spids: [2063] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_owner'))} {(-o)} {(-n)} {(DQ ($ Id.VSub_DollarName '$_perms'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2102) ) ] action: [ (C {(err)} { (DQ ('The message file (') ($ Id.VSub_DollarName '$msgfile') (') may be writeable only by root.') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2116) arg_word: {(1)} ) ] spids: [2083 2104] ) ] ) (command.Pipeline children: [ (C {(cat)} {(DQ ($ Id.VSub_DollarName '$msgfile'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:2133) cond: [ (command.Sentence child: (C {(read)} {(_line)}) terminator: (Token id:Id.Op_Semi val:';' span_id:2139) ) ] body: (command.DoGroup children: [ (C {(eval)} {(echo)} {(DQ ($ Id.VSub_DollarName '$_line'))}) ] ) ) (C {(${ Id.VSub_Name MAILCMD)} {(-s) (DQ (Welcome))} {(${ Id.VSub_Name username)} ) ] negated: F ) (C {(info)} { (DQ ('Sent welcome message to (') ($ Id.VSub_DollarName '$username') (').') ) } ) ] ) ] ) ] spids: [1967 1980] ) ] ) ] ) ) (command.ShFunction name: get_user body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [2216] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2236) ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:2240) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:2244) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2260) ) ] action: [(C {(echo)} {(-n)} {(DQ ('Username: '))}) (C {(read)} {(_input)})] spids: [2249 2262] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2284) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f1)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [2282] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2336) ) ] action: [ (C {(err)} {(DQ ('You must enter a username!'))}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2360) ) ] ) ] spids: [2325 2338] ) ] ) (command.Simple words: [{(${ Id.VSub_Name PWCMD)} {(usershow)} {($ Id.VSub_DollarName '$_input')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:2374) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:2378) fd: 2 arg_word: {(1)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_QMark '$?'))} {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2395) ) ] action: [ (C {(err)} {(DQ ('User exists!'))}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:2419) ) ] ) ] spids: [2382 2397] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:2425) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:username) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [2431] ) ] ) ] ) ) (command.ShFunction name: get_gecos body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [2458] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:2478) ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2493) ) ] action: [(C {(echo)} {(-n)} {(DQ ('Full name: '))}) (C {(read)} {(_input)})] spids: [2482 2495] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2517) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f7)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [2515] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugecos) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [2541] ) ] ) ] ) ) (command.ShFunction name: get_shell body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [2571] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_fullpath) op: assign_op.Equal rhs: (word.Empty) spids: [2574] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultshell'))} spids: [2577] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$Sflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2599) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(shell_exists)} {($ Id.VSub_DollarName '$ushell')})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:2612) ) ] action: [ (C {(info)} {(DQ ('Using default shell ') (${ Id.VSub_Name defaultshell) (.))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultshell'))} spids: [2628] ) ] ) ] spids: [2604 2614] ) ] ) ] spids: [2588 2601] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2652) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Shell (') ($ Id.VSub_DollarName '$shells') (') [') (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2665) command_list: (command.CommandList children: [(C {(basename)} {($ Id.VSub_DollarName '$ushell')})] ) ) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [2641 2654] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2686) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f9)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [2684] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2721) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$Sflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2737) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [2742] ) ] ) ] spids: [2726 2739] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_fullpath) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2752) command_list: (command.CommandList children: [ (C {(fullpath_from_shell)} {($ Id.VSub_DollarName '$_input')}) ] ) ) } spids: [2751] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_fullpath'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2772) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_fullpath'))} spids: [2777] ) ] ) ] spids: [2761 2774] ) ] else_action: [ (C {(err)} { (DQ ('Invalid shell (') ($ Id.VSub_DollarName '$_input') (') for user ') ($ Id.VSub_DollarName '$username') (.) ) } ) (C {(info)} {(DQ ('Using default shell ') (${ Id.VSub_Name defaultshell) (.))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultshell'))} spids: [2808] ) ] ) ] ) ] ) ] spids: [2710 2723] ) ] ) ] ) ) (command.ShFunction name: get_homedir body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [2844] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2858) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Home directory [') (${ Id.VSub_Name homeprefix) (/) (${ Id.VSub_Name username) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [2847 2860] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2890) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f8)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [2888] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:2926) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhome) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [2931] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:homeprefix) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:2967) command_list: (command.CommandList children: [(C {(dirname)} {($ Id.VSub_DollarName '$uhome')})] ) ) ) } spids: [2965] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:homeprefix) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$uhome'))} spids: [2978] ) ] ) ] ) ] spids: [2915 2928] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhome) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name homeprefix) (/) (${ Id.VSub_Name username))} spids: [2987] ) ] ) ] ) ] ) ) (command.ShFunction name: get_homeperm body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhomeperm) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$defaultHomePerm')} spids: [3020] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [3024] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: (word.Empty) spids: [3027] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uhomeperm'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3042) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: { (DQ ('Home directory permissions [') (${ Id.VSub_Name uhomeperm) (']: ')) } spids: [3047] ) ] ) ] spids: [3031 3044] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: {(DQ ('Home directory permissions (Leave empty for default): '))} spids: [3060] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3080) ) ] action: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$_prompt'))}) (C {(read)} {(_input)}) ] spids: [3069 3082] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3114) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhomeperm) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [3119] ) ] ) ] spids: [3103 3116] ) ] ) ] ) ) (command.ShFunction name: get_uid body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uuid) op: assign_op.Equal rhs: {(${ Id.VSub_Name uidstart)} spids: [3149] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [3155] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: (word.Empty) spids: [3158] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$uuid'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3173) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uuid) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3179) command_list: (command.CommandList children: [(C {(get_nextuid)} {($ Id.VSub_DollarName '$uuid')})] ) ) } spids: [3178] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: {(DQ ('Uid [') ($ Id.VSub_DollarName '$uuid') (']: '))} spids: [3188] ) ] ) ] spids: [3162 3175] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_prompt) op: assign_op.Equal rhs: {(DQ ('Uid (Leave empty for default): '))} spids: [3199] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3219) ) ] action: [ (C {(echo)} {(-n)} {(DQ ($ Id.VSub_DollarName '$_prompt'))}) (C {(read)} {(_input)}) ] spids: [3208 3221] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3243) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f2)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [3241] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uuid) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_input')} spids: [3280] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uuid) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3285) command_list: (command.CommandList children: [(C {(get_nextuid)} {($ Id.VSub_DollarName '$uuid')})] ) ) } spids: [3284] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uidstart) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$uuid')} spids: [3294] ) ] ) ] ) ) (command.ShFunction name: get_class body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uclass) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultclass'))} spids: [3316] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [3322] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_class) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:uclass span_id:3327) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(DQ (default))} ) ) } spids: [3325] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3347) ) ] action: [ (C {(echo)} {(-n)} {(DQ ('Login class [') ($ Id.VSub_DollarName '$_class') (']: '))}) (C {(read)} {(_input)}) ] spids: [3336 3349] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3373) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f4)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [3371] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uclass) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [3410] ) ] ) ] ) ] ) ) (command.ShFunction name: get_logingroup body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ulogingroup) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultLgroup'))} spids: [3446] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [3452] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3467) ) ] action: [ (C {(echo)} {(-n)} { (DQ ('Login group [') (braced_var_sub token: (Token id:Id.VSub_Name val:ulogingroup span_id:3479) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {($ Id.VSub_DollarName '$username')} ) ) (']: ') ) } ) (C {(read)} {(_input)}) ] spids: [3456 3469] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3497) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f3)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [3495] ) ] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ulogingroup) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [3538] ) ] ) ] ) ] ) ) (command.ShFunction name: get_groups body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugroups) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultgroups'))} spids: [3565] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: (word.Empty) spids: [3571] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_group) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:ulogingroup span_id:3576) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(DQ (${ Id.VSub_Name username))} ) ) } spids: [3574] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3598) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) (C {(echo)} {(-n)} { (DQ ('Login group is ') ($ Id.VSub_DollarName '$_group') ('. Invite ') ($ Id.VSub_DollarName '$username') ) } ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) (C {(echo)} {(-n)} {(DQ (' into other groups? [') ($ Id.VSub_DollarName '$ugroups') (']: '))} ) ] ) ] spids: [3587 3600] ) ] else_action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) (C {(echo)} {(-n)} {(DQ ('Enter additional groups [') ($ Id.VSub_DollarName '$ugroups') (']: '))} ) ] ) ] ) (C {(read)} {(_input)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugroups) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [3697] ) ] ) ] ) ] ) ) (command.ShFunction name: get_expire_dates body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:upwexpire) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3726) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f5)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [3724] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uexpire) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:3749) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fileline'))}) (C {(cut)} {(-f6)} {(-d) (Id.Lit_Other ':')}) ] negated: F ) ] ) ) ) } spids: [3747] ) ] ) ] ) ) (command.ShFunction name: get_password body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$savedpwtype'))} {(Id.Lit_RBracket ']')} ) (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$savedpwtype')} spids: [3830] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:savedpwtype) op: assign_op.Equal rhs: (word.Empty) spids: [3834] ) ] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:upass) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:fileline span_id:3847) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {('*:*:*:*:*:*:*:*:*:')} ) ) } spids: [3845] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$upass'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:3865) ) ] action: [ (command.Case to_match: {($ Id.VSub_DollarName '$passwdtype')} arms: [ (case_arm pat_list: [{(yes)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(none)} spids: [3885] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:savedpwtype) op: assign_op.Equal rhs: {(yes)} spids: [3889] ) ] ) ] spids: [3877 3878 3893 -1] ) ] ) ] spids: [3854 3867] ) ] else_action: [ (command.Case to_match: {($ Id.VSub_DollarName '$passwdtype')} arms: [ (case_arm pat_list: [{(random)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(yes)} spids: [3913] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:savedpwtype) op: assign_op.Equal rhs: {(random)} spids: [3917] ) ] ) ] spids: [3909 3910 3921 -1] ) ] ) ] ) ] ) ) (command.ShFunction name: input_from_file body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_field) op: assign_op.Equal rhs: (word.Empty) spids: [3951] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:3955) cond: [ (command.Sentence child: (C {(read)} {(-r)} {(fileline)}) terminator: (Token id:Id.Op_Semi val:';' span_id:3963) ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$fileline'))} arms: [ (case_arm pat_list: [ { (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\#' span_id:3977) ) (Id.Lit_Star '*') } {(SQ )} ] spids: [3977 3982 3985 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(get_user)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:3996) ) ] ) (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)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugroups) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$defaultgroups'))} spids: [4026] ) ] ) (C {(add_user)}) ] spids: [3988 3989 4036 -1] ) ] ) ] ) ) ] ) ) (command.ShFunction name: input_interactive body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_disable) op: assign_op.Equal rhs: (word.Empty) spids: [4066] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pass) op: assign_op.Equal rhs: (word.Empty) spids: [4069] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_passconfirm) op: assign_op.Equal rhs: (word.Empty) spids: [4072] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_random) op: assign_op.Equal rhs: {(DQ (no))} spids: [4075] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_emptypass) op: assign_op.Equal rhs: {(DQ (no))} spids: [4081] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_usepass) op: assign_op.Equal rhs: {(DQ (yes))} spids: [4087] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_logingroup_ok) op: assign_op.Equal rhs: {(DQ (no))} spids: [4093] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_groups_ok) op: assign_op.Equal rhs: {(DQ (no))} spids: [4099] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$passwdtype')} arms: [ (case_arm pat_list: [{(none)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_emptypass) op: assign_op.Equal rhs: {(DQ (yes))} spids: [4116] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_usepass) op: assign_op.Equal rhs: {(DQ (yes))} spids: [4122] ) ] ) ] spids: [4112 4113 4128 -1] ) (case_arm pat_list: [{(no)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_usepass) op: assign_op.Equal rhs: {(DQ (no))} spids: [4135] ) ] ) ] spids: [4131 4132 4141 -1] ) (case_arm pat_list: [{(random)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_random) op: assign_op.Equal rhs: {(DQ (yes))} spids: [4148] ) ] ) ] spids: [4144 4145 4154 -1] ) ] ) (C {(get_user)}) (C {(get_gecos)}) (C {(get_uid)}) (command.WhileUntil keyword: (Token id:Id.KW_Until val:until span_id:4179) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_logingroup_ok'))} {(Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4192) ) ] body: (command.DoGroup children: [ (C {(get_logingroup)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_logingroup_ok) op: assign_op.Equal rhs: {(yes)} spids: [4200] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$ulogingroup'))} {(-a)} {(DQ ($ Id.VSub_DollarName '$username'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$ulogingroup'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4228) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [ {(${ Id.VSub_Name PWCMD)} {(show)} {(group)} {($ Id.VSub_DollarName '$ulogingroup')} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:4247) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '2>&' span_id: 4251 ) fd: 2 arg_word: {(1)} ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4253) ) ] action: [ (C {(echo)} { (DQ ('Group ') ($ Id.VSub_DollarName '$ulogingroup') (' does not exist!') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_logingroup_ok) op: assign_op.Equal rhs: {(no)} spids: [4267] ) ] ) ] spids: [4233 4255] ) ] ) ] spids: [4204 4230] ) ] ) ] ) ) (command.WhileUntil keyword: (Token id:Id.KW_Until val:until span_id:4280) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_groups_ok'))} {(Id.Lit_Equals '=')} {(yes)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4293) ) ] body: (command.DoGroup children: [ (C {(get_groups)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_groups_ok) op: assign_op.Equal rhs: {(yes)} spids: [4301] ) ] ) (command.ForEach iter_name: i iter_words: [{($ Id.VSub_DollarName '$ugroups')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$username'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$i'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4333) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [ {(${ Id.VSub_Name PWCMD)} {(show)} {(group)} {($ Id.VSub_DollarName '$i')} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '>' span_id: 4352 ) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id: Id.Redir_GreatAnd val: '2>&' span_id: 4356 ) fd: 2 arg_word: {(1)} ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:4358) ) ] action: [ (C {(echo)} { (DQ ('Group ') ($ Id.VSub_DollarName '$i') (' does not exist!') ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_groups_ok) op: assign_op.Equal rhs: {(no)} spids: [4372] ) ] ) ] spids: [4338 4360] ) ] ) ] spids: [4317 4335] ) ] ) ] ) ) ] ) ) (C {(get_class)}) (C {(get_shell)}) (C {(get_homedir)}) (C {(get_homeperm)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:4402) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:4406) ) ] body: (command.DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Use password-based authentication? [') ($ Id.VSub_DollarName '$_usepass') (']: ') ) } ) (C {(read)} {(_input)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_usepass')} spids: [4439] ) ] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$_input')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(DQ (no))} spids: [4463] ) ] ) ] spids: [4450 4460 4469 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:4495) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:4499) ) ] body: (command.DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Use an empty password? (yes/no) [') ($ Id.VSub_DollarName '$_emptypass') (']: ') ) } ) (C {(read)} {(_input)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_emptypass) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_input')} spids: [4532] ) ] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$_emptypass')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')} ] action: [ (C {(echo)} {(-n)} { (DQ ('Use a random password? (yes/no) [') ($ Id.VSub_DollarName '$_random') (']: ') ) } ) (C {(read)} {(_input)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_random) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$_input'))} spids: [4584] ) ] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$_random')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(DQ (random))} spids: [4620] ) ] ) (command.ControlFlow token: (Token id: Id.ControlFlow_Break val: break span_id: 4626 ) ) ] spids: [4597 4617 4629 -1] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(DQ (yes))} spids: [4635] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Break val: break span_id: 4653 ) ) ] ) (C {(trap)} { (SQ (Token id: Id.Lit_Chars val: 'stty echo; exit' span_id: 4659 ) ) } {(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)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$upass'))} {(-a)} {(-z)} {(DQ ($ Id.VSub_DollarName '$_passconfirm'))} {(Id.Lit_RBracket ']')} ) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 4756 ) ) ] ) ] spids: [4543 4553 4759 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(DQ (none))} spids: [4785] ) ] ) (command.Sentence child: (command.ControlFlow token: (Token id: Id.ControlFlow_Break val: break span_id: 4791 ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:4792) ) ] spids: [4762 4782 4795 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 4806 ) ) ] spids: [4798 4799 4809 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$upass'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ ($ Id.VSub_DollarName '$_passconfirm'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:4831) ) ] action: [ (C {(echo)} {(DQ ('Passwords did not match!'))}) (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 4843 ) ) ] spids: [4815 4833] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:4849) ) ] ) ) ] spids: [4472 4492 4855 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:4866) ) ] spids: [4858 4859 4869 -1] ) ] ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:4875) ) terminator: (Token id:Id.Op_Semi val:';' span_id:4876) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_disable) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:disableflag span_id:4884) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (no))}) ) } spids: [4882] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:4892) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:4896) ) ] body: (command.DoGroup children: [ (C {(echo)} {(-n)} { (DQ ('Lock out the account after creation? [') ($ Id.VSub_DollarName '$_disable') (']: ') ) } ) (C {(read)} {(_input)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$_input'))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_input) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$_disable')} spids: [4929] ) ] ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$_input')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:disableflag) op: assign_op.Equal rhs: (word.Empty) spids: [4953] ) ] ) ] spids: [4940 4950 4956 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:disableflag) op: assign_op.Equal rhs: {(yes)} spids: [4982] ) ] ) ] spids: [4959 4979 4986 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:4997) ) ] spids: [4989 4990 5000 -1] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:5006) ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_disable) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:disableflag span_id:5028) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(DQ (no))}) ) } spids: [5026] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(Username)} {($ Id.VSub_DollarName '$username')} ) ] ) (command.Case to_match: {($ Id.VSub_DollarName '$passwdtype')} arms: [ (case_arm pat_list: [{(yes)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pass) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'*****' span_id:5074))} spids: [5072] ) ] ) ] spids: [5068 5069 5078 -1] ) (case_arm pat_list: [{(no)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pass) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'<disabled>' span_id:5087))} spids: [5085] ) ] ) ] spids: [5081 5082 5091 -1] ) (case_arm pat_list: [{(none)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pass) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'<blank>' span_id:5100))} spids: [5098] ) ] ) ] spids: [5094 5095 5104 -1] ) (case_arm pat_list: [{(random)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_pass) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'<random>' span_id:5113))} spids: [5111] ) ] ) ] spids: [5107 5108 5117 -1] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Password))} {(DQ ($ Id.VSub_DollarName '$_pass'))} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ ('Pass Type'))} {(DQ ($ Id.VSub_DollarName '$passwdtype'))} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ ('Full Name'))} {(DQ ($ Id.VSub_DollarName '$ugecos'))} ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Uid))} {(DQ ($ Id.VSub_DollarName '$uuid'))} ) ] ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Class))} {(DQ ($ Id.VSub_DollarName '$uclass'))} ) (C {(printf)} {(DQ ('%-10s : %s %s') (Id.Lit_Other '\\') (n))} {(DQ (Groups))} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:ulogingroup span_id:5270) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {($ Id.VSub_DollarName '$username')} ) ) ) } {(DQ ($ Id.VSub_DollarName '$ugroups'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Home))} {(DQ ($ Id.VSub_DollarName '$uhome'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ ('Home Mode'))} {(DQ ($ Id.VSub_DollarName '$uhomeperm'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Shell))} {(DQ ($ Id.VSub_DollarName '$ushell'))} ) (C {(printf)} {(DQ ('%-10s : %s') (Id.Lit_Other '\\') (n))} {(DQ (Locked))} {(DQ ($ Id.VSub_DollarName '$_disable'))} ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:5349) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:5353) ) ] body: (command.DoGroup children: [ (C {(echo)} {(-n)} {(DQ ('OK? (yes/no): '))}) (C {(read)} {(_input)}) (command.Case to_match: {($ Id.VSub_DollarName '$_input')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')} ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:5392) arg_word: {(1)} ) ] spids: [5379 5389 5397 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [(C {(add_user)})] spids: [5400 5420 5426 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:5433) ) ] spids: [5429 5430 5436 -1] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:5442) ) ] ) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:5448) arg_word: {(0)} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:THISCMD) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5460) command_list: (command.CommandList children: [(C {(/usr/bin/basename)} {($ Id.VSub_Number '$0')})] ) ) } spids: [5459] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DEFAULTSHELL) op: assign_op.Equal rhs: {(/bin/sh)} spids: [5468] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ADDUSERCONF) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:ADDUSERCONF span_id:5474) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (adduser.conf)} ) ) ) } spids: [5471] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PWCMD) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:PWCMD span_id:5486) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (usr) (Id.Lit_Slash /) (sbin) (Id.Lit_Slash /) (pw)} ) ) ) } spids: [5483] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MAILCMD) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:MAILCMD span_id:5500) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(mail)}) ) ) } spids: [5497] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ETCSHELLS) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:ETCSHELLS span_id:5509) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(Id.Lit_Slash /) (etc) (Id.Lit_Slash /) (shells)} ) ) ) } spids: [5506] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOHOME) op: assign_op.Equal rhs: {(DQ (/nonexistent))} spids: [5518] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOLOGIN) op: assign_op.Equal rhs: {(DQ (nologin))} spids: [5523] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:NOLOGIN_PATH) op: assign_op.Equal rhs: {(DQ (/usr/sbin/nologin))} spids: [5528] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GREPCMD) op: assign_op.Equal rhs: {(DQ (/usr/bin/grep))} spids: [5533] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DATECMD) op: assign_op.Equal rhs: {(DQ (/bin/date))} spids: [5538] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:username) op: assign_op.Equal rhs: (word.Empty) spids: [5550] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uuid) op: assign_op.Equal rhs: (word.Empty) spids: [5552] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uidstart) op: assign_op.Equal rhs: (word.Empty) spids: [5554] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugecos) op: assign_op.Equal rhs: (word.Empty) spids: [5556] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ulogingroup) op: assign_op.Equal rhs: (word.Empty) spids: [5558] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uclass) op: assign_op.Equal rhs: (word.Empty) spids: [5560] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhome) op: assign_op.Equal rhs: (word.Empty) spids: [5562] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uhomeperm) op: assign_op.Equal rhs: (word.Empty) spids: [5564] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:upass) op: assign_op.Equal rhs: (word.Empty) spids: [5566] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ushell) op: assign_op.Equal rhs: (word.Empty) spids: [5568] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:udotdir) op: assign_op.Equal rhs: {(/usr/share/skel)} spids: [5570] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ugroups) op: assign_op.Equal rhs: (word.Empty) spids: [5573] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uexpire) op: assign_op.Equal rhs: (word.Empty) spids: [5575] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:upwexpire) op: assign_op.Equal rhs: (word.Empty) spids: [5577] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:shells) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5581) command_list: (command.CommandList children:[(C {(valid_shells)})]) ) ) } spids: [5579] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {(DQ (yes))} spids: [5588] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msgfile) op: assign_op.Equal rhs: {(/etc/adduser.msg)} spids: [5593] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msgflag) op: assign_op.Equal rhs: (word.Empty) spids: [5596] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:quietflag) op: assign_op.Equal rhs: (word.Empty) spids: [5598] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configflag) op: assign_op.Equal rhs: (word.Empty) spids: [5600] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fflag) op: assign_op.Equal rhs: (word.Empty) spids: [5602] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:infile) op: assign_op.Equal rhs: (word.Empty) spids: [5604] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:disableflag) op: assign_op.Equal rhs: (word.Empty) spids: [5606] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:Dflag) op: assign_op.Equal rhs: (word.Empty) spids: [5608] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:Sflag) op: assign_op.Equal rhs: (word.Empty) spids: [5610] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:readconfig) op: assign_op.Equal rhs: {(DQ (yes))} spids: [5612] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:homeprefix) op: assign_op.Equal rhs: {(DQ (/home))} spids: [5617] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:randompass) op: assign_op.Equal rhs: (word.Empty) spids: [5622] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fileline) op: assign_op.Equal rhs: (word.Empty) spids: [5624] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:savedpwtype) op: assign_op.Equal rhs: (word.Empty) spids: [5626] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultclass) op: assign_op.Equal rhs: (word.Empty) spids: [5628] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultLgroup) op: assign_op.Equal rhs: (word.Empty) spids: [5630] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultgroups) op: assign_op.Equal rhs: (word.Empty) spids: [5632] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultshell) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name DEFAULTSHELL))} spids: [5634] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultHomePerm) op: assign_op.Equal rhs: (word.Empty) spids: [5641] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:procowner) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:procowner span_id:5658) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:5660) command_list: (command.CommandList children:[(C {(/usr/bin/id)} {(-u)})]) ) } ) ) } spids: [5656] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$procowner'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (0))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5685) ) ] action: [ (C {(err)} { (SQ (Token id: Id.Lit_Chars val: 'you must be the super-user (uid 0) to use this utility.' span_id: 5693 ) ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:5697) arg_word: {(1)} ) ] spids: [5669 5687] ) ] ) (command.ForEach iter_name: _i iter_words: [{($ Id.VSub_Star '$*')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$_i'))} {(Id.Lit_Equals '=')} {(DQ (-N))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5750) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:readconfig) op: assign_op.Equal rhs: (word.Empty) spids: [5755] ) ] ) (command.Sentence child: (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:5758) ) terminator: (Token id:Id.Op_Semi val:';' span_id:5759) ) ] spids: [5735 5752] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$readconfig'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:5777) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Subshell command_list: (command.CommandList children: [ (command.Simple words: [{(.)} {(${ Id.VSub_Name ADDUSERCONF)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5800) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:5804) fd: 2 arg_word: {(1)} ) ] ) ] ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:5808) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(-r)} {(${ Id.VSub_Name ADDUSERCONF)} {(Id.Lit_RBracket ']')} ) (command.Simple words: [{(.)} {(${ Id.VSub_Name ADDUSERCONF)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:5831) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:5835) fd: 2 arg_word: {(1)} ) ] ) ] ) ] spids: [5790 5810] ) ] ) ] spids: [5766 5779] ) ] ) (command.ForEach iter_name: _switch do_arg_iter: T body: (command.DoGroup children: [ (command.Case to_match: {($ Id.VSub_DollarName '$_switch')} arms: [ (case_arm pat_list: [{(-L)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultclass) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [5871] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:5878) ) (C {(shift)}) ] spids: [5867 5868 5883 -1] ) (case_arm pat_list: [{(-C)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:configflag) op: assign_op.Equal rhs: {(yes)} spids: [5890] ) ] ) (C {(shift)}) ] spids: [5886 5887 5897 -1] ) (case_arm pat_list: [{(-D)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:Dflag) op: assign_op.Equal rhs: {(yes)} spids: [5904] ) ] ) (C {(shift)}) ] spids: [5900 5901 5911 -1] ) (case_arm pat_list: [{(-E)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:disableflag) op: assign_op.Equal rhs: {(yes)} spids: [5918] ) ] ) (C {(shift)}) ] spids: [5914 5915 5925 -1] ) (case_arm pat_list: [{(-k)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:udotdir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [5932] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:5939) ) (C {(shift)}) ] spids: [5928 5929 5944 -1] ) (case_arm pat_list: [{(-f)}] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Number '$2'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (-))} {(Id.Lit_RBracket ']')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:infile) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [5968] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fflag) op: assign_op.Equal rhs: {(yes)} spids: [5974] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:5979) ) (C {(shift)}) ] spids: [5947 5948 5984 -1] ) (case_arm pat_list: [{(-g)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultLgroup) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [5991] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:5998) ) (C {(shift)}) ] spids: [5987 5988 6003 -1] ) (case_arm pat_list: [{(-G)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultgroups) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [6010] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6017) ) (C {(shift)}) ] spids: [6006 6007 6022 -1] ) (case_arm pat_list: [{(-h)}] action: [ (C {(show_usage)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:6032) arg_word: {(0)} ) ] spids: [6025 6026 6037 -1] ) (case_arm pat_list: [{(-d)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:homeprefix) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [6044] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6051) ) (C {(shift)}) ] spids: [6040 6041 6056 -1] ) (case_arm pat_list: [{(-m)}] action: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$2'))} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msgflag) op: assign_op.Equal rhs: (word.Empty) spids: [6081] ) ] ) ] spids: [6072 6078 6084 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msgflag) op: assign_op.Equal rhs: {(yes)} spids: [6091] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:msgfile) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [6095] ) ] ) ] spids: [6087 6088 6101 -1] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6108) ) (C {(shift)}) ] spids: [6059 6060 6113 -1] ) (case_arm pat_list: [{(-M)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultHomePerm) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [6120] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6125) ) (C {(shift)}) ] spids: [6116 6117 6130 -1] ) (case_arm pat_list: [{(-N)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:readconfig) op: assign_op.Equal rhs: (word.Empty) spids: [6137] ) ] ) (C {(shift)}) ] spids: [6133 6134 6143 -1] ) (case_arm pat_list: [{(-w)}] action: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$2'))} arms: [ (case_arm pat_list: [{(no)} {(none)} {(random)} {(yes)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:passwdtype) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [6169] ) ] ) ] spids: [6159 6166 6173 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(show_usage)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:6183) arg_word: {(1)} ) ] spids: [6176 6177 6188 -1] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6195) ) (C {(shift)}) ] spids: [6146 6147 6200 -1] ) (case_arm pat_list: [{(-q)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:quietflag) op: assign_op.Equal rhs: {(yes)} spids: [6207] ) ] ) (C {(shift)}) ] spids: [6203 6204 6214 -1] ) (case_arm pat_list: [{(-s)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:defaultshell) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6223) command_list: (command.CommandList children: [(C {(fullpath_from_shell)} {($ Id.VSub_Number '$2')})] ) ) ) } spids: [6221] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6234) ) (C {(shift)}) ] spids: [6217 6218 6239 -1] ) (case_arm pat_list: [{(-S)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:Sflag) op: assign_op.Equal rhs: {(yes)} spids: [6246] ) ] ) (C {(shift)}) ] spids: [6242 6243 6253 -1] ) (case_arm pat_list: [{(-u)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uidstart) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [6260] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:6265) ) (C {(shift)}) ] spids: [6256 6257 6270 -1] ) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$fflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6298) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$infile'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6314) ) ] action: [(C {(input_from_file)})] spids: [6303 6316] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-n)} {(DQ ($ Id.VSub_DollarName '$infile'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6333) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-r)} {(DQ ($ Id.VSub_DollarName '$infile'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6349) ) ] action: [ (command.Simple words: [{(input_from_file)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:6356) fd: -1 arg_word: {($ Id.VSub_DollarName '$infile')} ) ] ) ] spids: [6338 6351] ) ] else_action: [ (C {(err)} { (DQ ('File (') ($ Id.VSub_DollarName '$infile') (') is unreadable or does not exist.') ) } ) ] ) ] spids: [6322 6335] ) ] ) ] spids: [6287 6300] ) ] else_action: [ (C {(input_interactive)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:6384) cond: [ (command.Sentence child: (C {(Id.Lit_Other ':')}) terminator: (Token id:Id.Op_Semi val:';' span_id:6388) ) ] body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-z)} {(DQ ($ Id.VSub_DollarName '$configflag'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:6404) ) ] action: [(C {(echo)} {(-n)} {(DQ ('Add another user? (yes/no): '))})] spids: [6393 6406] ) ] else_action: [ (C {(echo)} {(-n)} {(DQ ('Re-edit the default configuration? (yes/no): '))}) ] ) (C {(read)} {(_input)}) (command.Case to_match: {($ Id.VSub_DollarName '$_input')} arms: [ (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ss) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Ee) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Yy) (Id.Lit_RBracket ']')} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:uidstart) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:6469) command_list: (command.CommandList children: [ (C {(get_nextuid)} {($ Id.VSub_DollarName '$uidstart')}) ] ) ) } spids: [6468] ) ] ) (C {(input_interactive)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:6481) ) ] spids: [6445 6465 6484 -1] ) (case_arm pat_list: [ {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']') (Id.Lit_LBracket '[') (Oo) (Id.Lit_RBracket ']') } {(Id.Lit_LBracket '[') (Nn) (Id.Lit_RBracket ']')} ] action: [(C {(echo)} {(DQ ('Goodbye!'))})] spids: [6487 6497 6507 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Continue val:continue span_id:6514) ) ] spids: [6510 6511 6517 -1] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:6523) ) ] ) ) ] ) ] )