(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SAVEDFILE) op: assign_op.Equal rhs: {(/var/lib/urandom/random-seed)} spids: [58] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(-c)} {(/dev/urandom)} {(Id.Lit_RBracket ']')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:72) arg_word: {(0)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {(/sbin) (Id.Lit_Other ':') (/bin)} spids: [77] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:POOLBYTES) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.ArithWord w: { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 91 ) command_list: (command.CommandList children: [ (command.Simple words: [ {(cat)} {(/proc/sys/kernel/random/poolsize)} ] redirects: [ (redir.Redir op: (Token id: Id.Redir_Great val: '2>' span_id: 96 ) fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ) } ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 7)}) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 8)}) ) ) } spids: [86] ) ] ) ] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:112) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:POOLBYTES) op: assign_op.Equal rhs: {(512)} spids: [117] ) ] ) ] spids: [82 114] ) ] ) (C {(.)} {(/lib/init/vars.sh)}) (C {(.)} {(/lib/lsb/init-functions)}) (command.ShFunction name: do_status body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {($ Id.VSub_DollarName '$SAVEDFILE')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:150) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:155) arg_word: {(0)} ) ] spids: [140 152] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:163) arg_word: {(4)} ) ] ) ] ) ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(start)} {(DQ )}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {(Id.Lit_Equals '=')} {(no)} {(Id.Lit_RBracket ']')} ) (C {(log_action_begin_msg)} {(DQ ('Initializing random number generator'))}) ] ) (command.Subshell command_list: (command.CommandList children: [ (C {(date)} {(Id.Lit_Other '+') (Id.Lit_Other '%') (s.) (Id.Lit_Other '%') (N)}) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ ($ Id.VSub_DollarName '$SAVEDFILE'))} {(Id.Lit_RBracket ']')} ) ] action: [(C {(cat)} {(DQ ($ Id.VSub_DollarName '$SAVEDFILE'))})] spids: [259 272] ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:303) fd: -1 arg_word: {(/dev/urandom)} ) ] ) (C {(umask)} {(077)}) (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/urandom)} {(Id.Lit_VarLike 'of=') ($ Id.VSub_DollarName '$SAVEDFILE')} {(Id.Lit_VarLike 'bs=') ($ Id.VSub_DollarName '$POOLBYTES')} {(Id.Lit_VarLike 'count=') (1)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:355) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:358) fd: 2 arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ES) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [362] ) ] ) (C {(umask)} {(022)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {(Id.Lit_Equals '=')} {(no)} {(Id.Lit_RBracket ']')} ) (C {(log_action_end_msg)} {($ Id.VSub_DollarName '$ES')}) ] ) ] spids: [182 186 390 -1] ) (case_arm pat_list: [{(stop)}] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {(Id.Lit_Equals '=')} {(no)} {(Id.Lit_RBracket ']')} ) (C {(log_action_begin_msg)} {(DQ ('Saving random seed'))}) ] ) (C {(umask)} {(077)}) (command.Simple words: [ {(dd)} {(Id.Lit_VarLike 'if=') (/dev/urandom)} {(Id.Lit_VarLike 'of=') ($ Id.VSub_DollarName '$SAVEDFILE')} {(Id.Lit_VarLike 'bs=') ($ Id.VSub_DollarName '$POOLBYTES')} {(Id.Lit_VarLike 'count=') (1)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:453) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:456) fd: 2 arg_word: {(1)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ES) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [460] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_DollarName '$VERBOSE'))} {(Id.Lit_Equals '=')} {(no)} {(Id.Lit_RBracket ']')} ) (C {(log_action_end_msg)} {($ Id.VSub_DollarName '$ES')}) ] ) ] spids: [393 394 483 -1] ) (case_arm pat_list: [{(status)}] action: [ (C {(do_status)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:493) arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [486 487 498 -1] ) (case_arm pat_list: [{(restart)} {(reload)} {(force-reload)}] action: [ (command.Simple words: [{(echo)} {(DQ ("Error: argument '") ($ Id.VSub_Number '$1') ("' not supported"))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:517) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:521) arg_word: {(3)} ) ] spids: [501 506 526 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.Simple words: [{(echo)} {(DQ ('Usage: urandom start|stop'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:539) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:543) arg_word: {(3)} ) ] spids: [529 530 548 -1] ) ] ) (C {(Id.Lit_Other ':')}) ] )