Index: branches/stable/cgi-bin/main.cgi
===================================================================
--- branches/stable/cgi-bin/main.cgi	(revision 29)
+++ branches/stable/cgi-bin/main.cgi	(revision 32)
@@ -782,4 +782,10 @@
 	or croak "Could not open assign.html: $!";
     $html = join('',<HTML>);
+    my $masterlist = "<select name=allocfrom><option selected>-</option>\n";
+    foreach my $master (@masterblocks) {
+      $masterlist .= "<option>$master</option>\n";
+    }
+    $masterlist .= "</select>\n";
+    $html =~ s|\$\$MASTERLIST\$\$|$masterlist|g;
     close HTML;
   }
@@ -857,6 +863,11 @@
       my $failmsg;
       if ($webvar{alloctype} eq 'rr') {
-	$sql = "select * from freeblocks where maskbits<=$webvar{maskbits} and routed='n'".
-	  " order by maskbits desc";
+        if ($webvar{allocfrom} ne '-') {
+	  $sql = "select * from freeblocks where maskbits<=$webvar{maskbits} and routed='n'".
+		" and cidr <<= '$webvar{allocfrom}' order by maskbits desc";
+	} else {
+	  $sql = "select * from freeblocks where maskbits<=$webvar{maskbits} and routed='n'".
+		" order by maskbits desc";
+	}
 	$failmsg = "No suitable free block found.<br>\nWe do not have a free".
 	  " routeable block of that size.<br>\nYou will have to either route".
@@ -876,6 +887,11 @@
 	    " chose a smaller blocksize.";
 	}
-	$sql = "select * from freeblocks where city='$city' and maskbits<=$webvar{maskbits}".
-	  " and routed='y' order by cidr,maskbits desc";
+	if ($webvar{allocfrom} ne '-') {
+	  $sql = "select * from freeblocks where city='$city' and maskbits<=$webvar{maskbits}".
+		" and cidr <<= '$webvar{allocfrom}' and routed='y' order by cidr,maskbits desc";
+	} else {
+	  $sql = "select * from freeblocks where city='$city' and maskbits<=$webvar{maskbits}".
+		" and routed='y' order by cidr,maskbits desc";
+	}
       }
       $sth = $ip_dbh->prepare($sql);
