Index: trunk/dns-rpc.cgi
===================================================================
--- trunk/dns-rpc.cgi	(revision 119)
+++ trunk/dns-rpc.cgi	(revision 121)
@@ -5,4 +5,5 @@
 use warnings;
 use DNSDB;	# note we're not importing subs;  this lets us (ab)use the same sub names here for convenience
+use Data::Dumper;
 
 #use Frontier::RPC2;
@@ -19,8 +20,16 @@
 # need to create a DNSDB object too
 my ($dbh,$msg) = DNSDB::connectDB("dnsdb","dnsdb","secret","dnsdbhost");
+DNSDB::initGlobals($dbh);
 
 my $methods = {
 	'dnsdb.addDomain'	=> \&addDomain,
 	'dnsdb.delDomain'	=> \&delDomain,
+	'dnsdb.addGroup'	=> \&addGroup,
+	'dnsdb.delGroup'	=> \&delGroup,
+	'dnsdb.addUser'		=> \&addUser,
+	'dnsdb.updateUser'	=> \&updateUser,
+	'dnsdb.delUser'		=> \&delUser,
+	'dnsdb.getSOA'		=> \&getSOA,
+
 	'dnsdb.getMethods'	=> \&get_method_list
 };
@@ -79,11 +88,12 @@
   die "Missing remote system name" if !$args{rpcsystem};	# for logging
 
+  my ($code,$msg);
   # Let's be nice;  delete based on domid OR domain name.  Saves an RPC call round-trip, maybe.
   if ($args{domain} =~ /^\d+$/) {
-    my ($code,$msg) = DNSDB::delDomain($dbh, $args{domain});
+    ($code,$msg) = DNSDB::delDomain($dbh, $args{domain});
   } else {
     my $domid = DNSDB::domainID($dbh, $args{domain});
     die "Can't find domain" if !$domid;
-    my ($code,$msg) = DNSDB::delDomain($dbh, $domid);
+    ($code,$msg) = DNSDB::delDomain($dbh, $domid);
   }
   die $msg if $code eq 'FAIL';
@@ -101,4 +111,5 @@
 
 # not sure how to usefully represent permissions from any further out from DNSDB.pm :/
+# not to mention, permissions are checked at the UI layer, not the DB layer.
   my $perms = {domain_edit => 1, domain_create => 1, domain_delete => 1,
 	record_edit => 1, record_create => 1, record_delete => 1
@@ -117,11 +128,12 @@
   die "Missing remote system name" if !$args{rpcsystem};	# for logging
 
+  my ($code,$msg);
   # Let's be nice;  delete based on groupid OR group name.  Saves an RPC call round-trip, maybe.
   if ($args{group} =~ /^\d+$/) {
-    my ($code,$msg) = DNSDB::delGroup($dbh, $args{group});
+    ($code,$msg) = DNSDB::delGroup($dbh, $args{group});
   } else {
     my $grpid = DNSDB::groupID($dbh, $args{group});
     die "Can't find group" if !$grpid;
-    my ($code,$msg) = DNSDB::delGroup($dbh, $grpid);
+    ($code,$msg) = DNSDB::delGroup($dbh, $grpid);
   }
   die $msg if $code eq 'FAIL';
@@ -139,4 +151,9 @@
   die "Missing remote system name" if !$args{rpcsystem};	# for logging
 
+# not sure how to usefully represent permissions from any further out from DNSDB.pm :/
+# not to mention, permissions are checked at the UI layer, not the DB layer.
+  my $perms = {domain_edit => 1, domain_create => 1, domain_delete => 1,
+	record_edit => 1, record_create => 1, record_delete => 1
+	};
   # bend and twist;  get those arguments in in the right order!
   $args{type} = 'u' if !$args{type};
@@ -162,4 +179,10 @@
 
   die "Missing UID" if !$args{uid};
+
+# not sure how to usefully represent permissions from any further out from DNSDB.pm :/
+# not to mention, permissions are checked at the UI layer, not the DB layer.
+  my $perms = {domain_edit => 1, domain_create => 1, domain_delete => 1,
+	record_edit => 1, record_create => 1, record_delete => 1
+	};
   # bend and twist;  get those arguments in in the right order!
   my @userargs = ($args{uid}, $args{username}, $args{group}, $args{pass}, $args{state}, $args{type});
@@ -196,4 +219,14 @@
   die "Missing remote username" if !$args{rpcuser};		# for logging
   die "Missing remote system name" if !$args{rpcsystem};	# for logging
+
+  my %ret = DNSDB::getSOA($dbh, $args{def}, $args{id});
+  if (!$ret{recid}) {
+    if ($args{def} eq 'y') {
+      die "No default SOA record in group";
+    } else {
+      die "No SOA record in domain";
+    }
+  }
+  return \%ret;
 }
 
