Index: trunk/dns.cgi
===================================================================
--- trunk/dns.cgi	(revision 83)
+++ trunk/dns.cgi	(revision 87)
@@ -7,5 +7,5 @@
 # Last update by $Author$
 ###
-# Copyright (C) 2008,2009 - Kris Deugau <kdeugau@deepnet.cx>
+# Copyright (C) 2008-2011 - Kris Deugau <kdeugau@deepnet.cx>
 
 use strict;
@@ -261,5 +261,4 @@
   $sortorder = $session->param($webvar{page}.'order');
 
-##work
 # set up the headers
   my @cols = ('host', 'type', 'val', 'distance', 'weight', 'port', 'ttl');
@@ -275,5 +274,4 @@
   $page->param(defrec => $webvar{defrec});
   if ($webvar{defrec} eq 'y') {
-##fixme: hardcoded group
     showdomain('y',$curgroup);
   } else {
@@ -291,5 +289,5 @@
   if ($webvar{recact} eq 'new') {
 
-    $page->param(todo => "Add record to");
+    $page->param(todo => "Add record");
     $page->param(recact => "add");
     $page->param(parentid => $webvar{parentid});
@@ -324,5 +322,5 @@
       $page->param(errmsg	=> $msg);
       $page->param(wastrying	=> "adding");
-      $page->param(todo		=> "Add record to");
+      $page->param(todo		=> "Add record");
       $page->param(recact	=> "add");
       $page->param(parentid	=> $webvar{parentid});
@@ -613,5 +611,7 @@
 
     my $alterperms = 0;	# flag iff we need to force custom permissions due to user's current access limits
-    my %newperms;
+
+    my %newperms;	# we're going to prefill the existing permissions, so we can change them.
+    getPermissions($dbh, 'user', $webvar{uid}, \%newperms);
 
     if ($webvar{pass1} ne $webvar{pass2}) {
@@ -642,10 +642,7 @@
 	$permstring = 'C:';
 	foreach (@permtypes) {
-	  $newperms{$_} = 0;
-	  $newperms{$_} = 1 if $webvar{$_} eq 'on';
-	  if ($permissions{admin}) {
+	  if ($permissions{admin} || $permissions{$_}) {
 	    $permstring .= ",$_" if defined($webvar{$_}) && $webvar{$_} eq 'on';
-	  } else {
-	    $permstring .= ",$_" if $permissions{$_} && defined($webvar{$_}) && $webvar{$_} eq 'on';
+	    $newperms{$_} = (defined($webvar{$_}) && $webvar{$_} eq 'on' ? 1 : 0);
 	  }
 	}
@@ -653,4 +650,5 @@
       } elsif ($permissions{admin} && $webvar{perms_type} eq 'clone') {
 	$permstring = "c:$webvar{clonesrc}";
+	getPermissions($dbh, 'user', $webvar{clonesrc}, \%newperms);
 	$page->param(perm_clone => 1);
       } else {
@@ -671,6 +669,5 @@
 ##fixme - need to actually get a correct permission set to pass in here,
 # also a flag to revert custom permissions to inherited
-##work
-	  ($code,$msg) = changePermissions($dbh, 'user', $webvar{uid}, \%newperms);
+	  ($code,$msg) = changePermissions($dbh, 'user', $webvar{uid}, \%newperms, ($permstring eq 'i'));
 	}
       }
@@ -694,4 +691,11 @@
       $page->param(action => $webvar{action});
       $page->param(set_permgroup => 1);
+      if ($webvar{perms_type} eq 'inherit') {	# set permission class radio
+	$page->param(perm_inherit => 1);
+      } elsif ($webvar{perms_type} eq 'clone') {
+	$page->param(perm_clone => 1);
+      } else {
+	$page->param(perm_custom => 1);
+      }
       $page->param(uname => $webvar{uname});
       $page->param(fname => $webvar{fname});
@@ -724,4 +728,5 @@
     $page->param(fname => $userinfo->{firstname});
     $page->param(lname => $userinfo->{lastname});
+    $page->param(set_permgroup => 1);
     if ($userinfo->{inherit_perm}) {
       $page->param(perm_inherit => 1);
@@ -729,5 +734,5 @@
       $page->param(perm_custom => 1);
     }
-
+##work
 #  } elsif ($webvar{action} eq 'update') {
   } else {
@@ -1043,5 +1048,7 @@
 }
 
+print "<pre>\n";
 foreach (@debugbits) { print; }
+print "</pre>\n";
 
 # spit it out
@@ -1239,4 +1246,7 @@
   $sth->execute;
 
+  # shut up some warnings, but don't stomp on caller's state
+  local $webvar{clonesrc} = 0 if !defined($webvar{clonesrc});
+
   my @clonesrc;
   while (my ($username,$uid) = $sth->fetchrow_array) {
@@ -1276,4 +1286,6 @@
         $page->param(lastoffs => int (($count-1)/$perpage));
       }
+    } else {
+      $page->param(onepage => 1);
     }
   }
@@ -1374,4 +1386,5 @@
 } # end listdomains()
 
+
 sub listgroups {
 
