Changeset 83 for trunk/dns.cgi
- Timestamp:
- 02/25/11 17:56:25 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dns.cgi
r80 r83 19 19 use Net::DNS; 20 20 use DBI; 21 use Data::Dumper; 21 22 22 23 use lib '.'; … … 592 593 } elsif ($webvar{page} eq 'user') { 593 594 594 fill_actypelist();595 #fill_actypelist($webvar{accttype}); 595 596 fill_clonemelist(); 596 597 my %grpperms; 597 598 getPermissions($dbh, 'group', $curgroup, \%grpperms); 598 fill_permissions($page, \%grpperms); 599 599 600 my $grppermlist = new HTML::Template(filename => "$templatedir/permlist.tmpl"); 600 601 my %noaccess; … … 602 603 $grppermlist->param(info => 1); 603 604 $page->param(grpperms => $grppermlist->output); 605 604 606 $page->param(is_admin => $permissions{admin}); 605 607 606 # if ($webvar{action} eq 'new') {607 # } els 608 if ($webvar{action} eq 'add') {608 if ($webvar{action} eq 'add' or $webvar{action} eq 'update') { 609 610 $page->param(add => 1) if $webvar{action} eq 'add'; 609 611 610 612 my ($code,$msg); 611 613 612 614 my $alterperms = 0; # flag iff we need to force custom permissions due to user's current access limits 615 my %newperms; 613 616 614 617 if ($webvar{pass1} ne $webvar{pass2}) { … … 616 619 $msg = "Passwords don't match"; 617 620 } else { 618 # assemble a permission string - far simpler than trying to pass an 619 # indeterminate set of permission flags individually 620 621 # ooooh. 622 # OOOOH. 623 # We have to see if the user can add any particularpermissions; otherwise we have a priviledge escalation. Whee.624 625 if (!$permissions{admin}) {626 627 628 629 630 631 632 633 634 635 }636 ##work 621 622 # assemble a permission string - far simpler than trying to pass an 623 # indeterminate set of permission flags individually 624 625 # But first, we have to see if the user can add any particular 626 # permissions; otherwise we have a priviledge escalation. Whee. 627 628 if (!$permissions{admin}) { 629 my %grpperms; 630 getPermissions($dbh, 'group', $curgroup, \%grpperms); 631 my $ret = comparePermissions(\%permissions, \%grpperms); 632 if ($ret ne '<' && $ret ne '!') { 633 # User's permissions are not a superset or equivalent to group. Can't inherit 634 # (and include access user doesn't currently have), so we force custom. 635 $webvar{perms_type} = 'custom'; 636 $alterperms = 1; 637 } 638 } 639 637 640 my $permstring; 638 641 if ($webvar{perms_type} eq 'custom') { 639 642 $permstring = 'C:'; 640 643 foreach (@permtypes) { 644 $newperms{$_} = 0; 645 $newperms{$_} = 1 if $webvar{$_} eq 'on'; 641 646 if ($permissions{admin}) { 642 647 $permstring .= ",$_" if defined($webvar{$_}) && $webvar{$_} eq 'on'; … … 652 657 $permstring = 'i'; 653 658 } 654 ($code,$msg) = addUser($dbh,$webvar{uname}, $curgroup, $webvar{pass1}, 655 ($webvar{makeactive} eq 'on' ? 1 : 0), $webvar{accttype}, $permstring, 656 $webvar{fname}, $webvar{lname}, $webvar{phone}); 657 } 658 659 # hokay, a bit of magic to decide which page we hit. 659 if ($webvar{action} eq 'add') { 660 ($code,$msg) = addUser($dbh, $webvar{uname}, $curgroup, $webvar{pass1}, 661 ($webvar{makeactive} eq 'on' ? 1 : 0), $webvar{accttype}, $permstring, 662 $webvar{fname}, $webvar{lname}, $webvar{phone}); 663 } else { 664 # User update is icky. I'd really like to do this in one atomic 665 # operation, but that would duplicate a **lot** of code in DNSDB.pm 666 # Allowing for changing group, but not coding web support just yet. 667 ($code,$msg) = updateUser($dbh, $webvar{uid}, $webvar{uname}, $webvar{gid}, $webvar{pass1}, 668 ($webvar{makeactive} eq 'on' ? 1 : 0), $webvar{accttype}, 669 $webvar{fname}, $webvar{lname}, $webvar{phone}); 670 if ($code eq 'OK') { 671 ##fixme - need to actually get a correct permission set to pass in here, 672 # also a flag to revert custom permissions to inherited 673 ##work 674 ($code,$msg) = changePermissions($dbh, 'user', $webvar{uid}, \%newperms); 675 } 676 } 677 } 678 660 679 if ($code eq 'OK') { 661 ##log 680 662 681 logaction(0, $session->param("username"), $webvar{group}, 663 "Addeduser $webvar{uname} ($webvar{fname} $webvar{lname})");682 ($webvar{action} eq 'add' ? 'Added' : 'Updated')." user $webvar{uname} ($webvar{fname} $webvar{lname})"); 664 683 if ($alterperms) { 665 684 changepage(page => "useradmin", warnmsg => 666 "You can only grant permissions you hold. $webvar{uname} added with reduced access."); 685 "You can only grant permissions you hold. $webvar{uname} ". 686 ($webvar{action} eq 'add' ? 'added' : 'updated')." with reduced access."); 667 687 } else { 668 688 changepage(page => "useradmin"); 669 689 } 690 691 # add/update failed: 670 692 } else { 671 # oddity - apparently, xhtml 1.0 strict swallows username as an HTML::Template var. O_o672 693 $page->param(add_failed => 1); 694 $page->param(action => $webvar{action}); 695 $page->param(set_permgroup => 1); 673 696 $page->param(uname => $webvar{uname}); 674 697 $page->param(fname => $webvar{fname}); … … 677 700 $page->param(pass2 => $webvar{pass2}); 678 701 $page->param(errmsg => $msg); 679 fill_actypelist(); 702 fill_permissions($page, \%newperms); 703 fill_actypelist($webvar{accttype}); 680 704 fill_clonemelist(); 681 705 } 682 706 683 707 } elsif ($webvar{action} eq 'edit') { 684 } elsif ($webvar{action} eq 'update') { 708 709 $page->param(set_permgroup => 1); 710 $page->param(action => 'update'); 711 $page->param(uid => $webvar{user}); 712 fill_clonemelist(); 713 714 my $userinfo = getUserData($dbh,$webvar{user}); 715 fill_actypelist($userinfo->{type}); 716 # not using this yet, but adding it now means we can *much* more easily do so later. 717 $page->param(gid => $webvar{group_id}); 718 719 my %curperms; 720 getPermissions($dbh, 'user', $webvar{user}, \%curperms); 721 fill_permissions($page, \%curperms); 722 723 $page->param(uname => $userinfo->{username}); 724 $page->param(fname => $userinfo->{firstname}); 725 $page->param(lname => $userinfo->{lastname}); 726 if ($userinfo->{inherit_perm}) { 727 $page->param(perm_inherit => 1); 728 } else { 729 $page->param(perm_custom => 1); 730 } 731 732 # } elsif ($webvar{action} eq 'update') { 685 733 } else { 686 734 # default is "new" 735 $page->param(add => 1); 736 $page->param(action => 'add'); 737 fill_permissions($page, \%grpperms); 738 fill_actypelist(); 687 739 } 688 740 … … 744 796 $page->param(pass2 => $webvar{pass2}); 745 797 $page->param(errmsg => $msg); 746 fill_actypelist( );798 fill_actypelist($webvar{accttype}); 747 799 fill_clonemelist(); 748 800 } … … 1168 1220 1169 1221 sub fill_actypelist { 1222 my $curtype = shift || 'u'; 1223 1170 1224 my @actypes; 1171 1225 1172 1226 my %row1 = (actypeval => 'u', actypename => 'user'); 1173 $row1{typesel} = 1 if $ webvar{accttype}eq 'u';1227 $row1{typesel} = 1 if $curtype eq 'u'; 1174 1228 push @actypes, \%row1; 1175 1229 1176 1230 my %row2 = (actypeval => 'S', actypename => 'superuser'); 1177 $row2{typesel} = 1 if $ webvar{accttype}eq 'S';1231 $row2{typesel} = 1 if $curtype eq 'S'; 1178 1232 push @actypes, \%row2; 1179 1233 1180 $page->param(actypelist 1234 $page->param(actypelist => \@actypes); 1181 1235 } 1182 1236
Note:
See TracChangeset
for help on using the changeset viewer.