Index: /trunk/cgi-bin/admin.cgi
===================================================================
--- /trunk/cgi-bin/admin.cgi	(revision 328)
+++ /trunk/cgi-bin/admin.cgi	(revision 329)
@@ -73,4 +73,11 @@
   while (my @data = $sth->fetchrow_array) {
     $typelist .= "<option value='$data[0]'>$data[1]</option>\n";
+  }
+
+  my $masterlist = '';
+  $sth = $ip_dbh->prepare("select cidr,mtime from masterblocks order by cidr");
+  $sth->execute;
+  while (my @data = $sth->fetchrow_array) {
+    $masterlist .= "<option value='$data[0]'>$data[0] ($data[1])</option>\n";
   }
 
@@ -89,4 +96,12 @@
 <input type=submit value="Show allocations">
 </form>
+
+<hr>rWHOIS tools:
+<form action="admin.cgi" method="POST">
+<input type=hidden name=action value=touch>
+Bump "last updated" timestamp on this master: <select name=whichmaster>$masterlist</select>
+<input type=submit value="Update timestamp"> (Sets timestamp to "now")</form>
+<a href="admin.cgi?action=listcust">Edit customer data for rWHOIS</a>
+
 <hr><a href="admin.cgi?action=showpools">List IP Pools</a> for manual tweaking and updates
 <hr><a href="admin.cgi?action=showusers">Manage users</a> (add/remove users;  change
@@ -257,4 +272,78 @@
 
   print $html;
+} elsif ($webvar{action} eq 'touch') {
+  print "Touching master $webvar{whichmaster}\n";
+} elsif ($webvar{action} eq 'listcust') {
+  print qq(Add new entry:\n
+<form action=admin.cgi method=POST>
+<table border=1><tr>
+<input type=hidden name=action value=newcust>
+<td>CustID:</td><td><input name=custid></td>
+<td>Name:</td><td><input name=name></td></tr>
+<tr><td>Street:</td><td><input name=street></td></tr>
+<!-- <td>Street2:</td><td><input name=street2></td> -->
+<tr><td>City:</td><td><input name=city></td>
+<td>Province: (2-letter code)</td><td><input name=province value=ON length=2 size=2></td></tr>
+<tr><td>Country: (2-letter code)</td><td><input name=country value=CA length=2 size=2></td>
+<td>Postal/ZIP Code:</td><td><input name=pocode></td></tr>
+<tr><td>Phone:</td><td><input name=phone></td>
+<!-- <td>Default rDNS:</td><td><input name=def_rdns></td></tr>
+<td>Description:</td><td><input name=description></td> -->
+<td>ARIN Handles:</td><td>
+ Tech: <input name=tech_handle value="VH25-ORG-ARIN"><br>
+ Abuse: <input name=abuse_handle><br>
+ Admin: <input name=admin_handle><br>
+Note:  Only tech is required at the moment.
+</td></tr>
+<tr><td colspan=4 align=center><input type=submit value="Add"></td></tr>
+</form></table>
+);
+  print "<p>Edit existing customer contact data:\n".
+	"<table border=1>\n<tr><td>CustID</td><td>Name</td><td>Tech handle</td></tr>\n";
+  $sth = $ip_dbh->prepare("select custid,name,tech_handle from customers order by custid");
+  $sth->execute;
+  while (my @data = $sth->fetchrow_array) {
+    print "<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td></tr>\n";
+  }
+} elsif ($webvar{action} eq 'newcust') {
+  if ($webvar{custid} eq '') {
+    print 'No CustID entered.  PTHBT!  (Hit "Back" and fix the problem.)';
+  } else {
+print "<table border=1>\n";
+foreach my $key (keys %webvar) {
+  print "<tr><td>$key</td><td>$webvar{$key}</td><tr>\n";
+}
+print "</table>\n";
+    $sth = $ip_dbh->prepare("insert into customers ".
+	"(custid, name, street, city, province, country, pocode, ".
+	"phone, tech_handle, abuse_handle, admin_handle) values ".
+	"('$webvar{custid}', '$webvar{name}', '$webvar{street}', ".
+	"'$webvar{city}', '$webvar{province}', '$webvar{country}', ".
+	"'$webvar{pocode}', '$webvar{phone}', '$webvar{techhandle}', ".
+	"'$webvar{abusehandle}', '$webvar{adminhandle}')");
+    $sth->execute;
+    if ($sth->err) {
+      print "INSERT failed:  ".$sth->errstr."\n";
+    } else {
+      print "Success!  Added customer contact data:\n".
+	qq(<table border=1><tr>
+<td>CustID:</td>$webvar{custid}</td><td>Name:</td>$webvar{name}</td></tr>
+<tr><td>Street:</td><td>$webvar{street}</td></tr>
+<tr><td>City:</td><td>$webvar{city}</td><td>Province:</td><td>$webvar{province}</td></tr>
+<tr><td>Country:</td><td>$webvar{country}</td>
+<td>Postal/ZIP Code:</td><td>$webvar{pocode}</td></tr>
+<tr><td>Phone:</td><td>$webvar{phone}</td>
+<!-- <td>Default rDNS:</td><td><input name=def_rdns></td></tr>
+<tr><td>Description:</td><td><input name=description></td> -->
+<td>ARIN Handles:</td><td>
+ Tech: $webvar{tech_handle}<br>
+ Abuse: $webvar{abuse_handle}<br>
+ Admin: $webvar{admin_handle}<br>
+</td></tr></table>
+);
+    } # $sth err check
+  } # bad custid
+} elsif ($webvar{action} eq 'updcust') {
+  print "Updated $webvar{custid}\n";
 } elsif ($webvar{action} eq 'showpools') {
   print "IP Pools currently allocated:\n".
Index: /trunk/cgi-bin/ipdb.psql
===================================================================
--- /trunk/cgi-bin/ipdb.psql	(revision 328)
+++ /trunk/cgi-bin/ipdb.psql	(revision 329)
@@ -4,19 +4,18 @@
 
 CREATE TABLE "customers" (
-	"custid" character varying(16) DEFAULT '' NOT NULL,
-	"name" character varying(64),
-	"street" character varying(25),
-	"street2" character varying(25),
-	"city" character varying(30),
-	"province" character(2),
-	"country" character(2),
-	"pocode" character varying(7),
-	"phone" character varying(15),
-	"tech_handle" character varying(50),
-	"abuse_handle" character varying(50),
-	"admin_handle" character varying(50),
-	"def_rdns" character varying(40),
-	"special" text,
-	Constraint "customers_pkey" Primary Key ("custid")
+	"custid" character varying(16) DEFAULT '' NOT NULL PRIMARY KEY
+	"name" character varying(64) DEFAULT '',
+	"street" character varying(25) DEFAULT '',
+	"street2" character varying(25) DEFAULT '',
+	"city" character varying(30) DEFAULT '',
+	"province" character(2) DEFAULT 'ON',
+	"country" character(2) DEFAULT 'CA',
+	"pocode" character varying(7) DEFAULT '',
+	"phone" character varying(15) DEFAULT '',
+	"tech_handle" character varying(50) DEFAULT 'VH25-ORG-ARIN',
+	"abuse_handle" character varying(50) DEFAULT '',
+	"admin_handle" character varying(50) DEFAULT '',
+	"def_rdns" character varying(40) DEFAULT '',
+	"special" text DEFAULT ''
 );
 
