#!/usr/local/bin/perl # my_group_chooser.cgi # A modified version of group_chooser.cgi that uses the my_ functions require './user-lib.pl'; &init_config(); &ReadParse(undef, undef, 1); %access = &get_module_acl(undef, ""); # Build list of primary groups &my_setpwent(); while(@uinfo = &my_getpwent()) { push(@{$members{$uinfo[3]}}, $uinfo[0]); } &my_endpwent(); if ($in{'multi'}) { # selecting multiple groups. if ($in{'frame'} == 0) { # base frame &PrintHeader(); print "\n"; print "$text{'groups_title1'}\n"; print "\n"; print "\n"; print "\n"; print " \n"; print " \n"; print "\n"; print "\n"; } elsif ($in{'frame'} == 1) { # list of all groups to choose from &popup_header(); print "\n"; print "$text{'groups_all'}\n"; print "\n"; foreach $u (&get_groups_list()) { if ($in{'group'} eq $u->[0]) { print "\n"; } else { print "\n"; } print "\n"; print "\n"; } print "
$u->[0]$u->[3]
\n"; &popup_footer(); } elsif ($in{'frame'} == 2) { # show chosen groups &popup_header(); print "$text{'groups_sel'}\n"; print <<'EOF';
EOF &popup_footer(); } elsif ($in{'frame'} == 3) { # output OK and Cancel buttons &popup_header(); print "\n"; print "
\n"; print "\n"; print "\n"; print "  \n"; print "
\n"; &popup_footer(); } } else { # selecting just one group .. display a list of all groups to choose from &popup_header($text{'groups_title2'}); print "\n"; print "\n"; foreach $u (&get_groups_list()) { if ($in{'group'} eq $u->[0]) { print "\n"; } else { print "\n"; } print "\n"; print "\n"; } print "
$u->[0]$u->[3]
\n"; &popup_footer(); } sub get_groups_list { local(@ginfo, @groups, %gcan); if ($access{'gedit_mode'} == 2 || $access{'gedit_mode'} == 3) { map { $gcan{$_}++ } split(/\s+/, $access{'gedit'}); } &my_setgrent(); while(@ginfo = &my_getgrent()) { @mems = &unique( split(/ /, $ginfo[3]), @{$members{$ginfo[2]}} ); if (@mems > 3) { @mems = (@mems[0..1], "..."); } $ginfo[3] = join(' ', @mems); if ($access{'gedit_mode'} == 0 || $access{'gedit_mode'} == 2 && $gcan{$ginfo[0]} || $access{'gedit_mode'} == 3 && !$gcan{$ginfo[0]} || $access{'gedit_mode'} == 4 && (!$access{'gedit'} || $ginfo[2] >= $access{'gedit'}) && (!$access{'gedit2'} || $ginfo[2] <= $access{'gedit2'})) { push(@groups, [ @ginfo ]); } } &my_endgrent(); return sort { $a->[0] cmp $b->[0] } @groups; }