invirt-web should depend on invirt-web-iptables
[invirt/packages/invirt-web.git] / code / validation.py
index f28603c..513b431 100644 (file)
@@ -7,7 +7,7 @@ import string
 import dns.resolver
 from invirt.database import Machine, NIC, Type, Disk, CDROM, Autoinstall
 from invirt.config import structs as config
 import dns.resolver
 from invirt.database import Machine, NIC, Type, Disk, CDROM, Autoinstall
 from invirt.config import structs as config
-from webcommon import InvalidInput
+from invirt.common import InvalidInput
 
 MAX_MEMORY_TOTAL = 512
 MAX_MEMORY_SINGLE = 256
 
 MAX_MEMORY_TOTAL = 512
 MAX_MEMORY_SINGLE = 256
@@ -44,9 +44,7 @@ class Validate:
         owner = testOwner(username, owner, machine)
         if owner is not None:
             self.owner = owner
         owner = testOwner(username, owner, machine)
         if owner is not None:
             self.owner = owner
-        admin = testAdmin(username, admin, machine)
-        if admin is not None:
-            self.admin = admin
+        self.admin = testAdmin(username, admin, machine)
         contact = testContact(username, contact, machine)
         if contact is not None:
             self.contact = contact
         contact = testContact(username, contact, machine)
         if contact is not None:
             self.contact = contact
@@ -68,6 +66,8 @@ class Validate:
                 raise CodeError("Invalid cdrom type '%s'" % cdrom)
             self.cdrom = cdrom
         if autoinstall is not None:
                 raise CodeError("Invalid cdrom type '%s'" % cdrom)
             self.cdrom = cdrom
         if autoinstall is not None:
+            #raise InvalidInput('autoinstall', 'install',
+            #                   "The autoinstaller has been temporarily disabled")
             self.autoinstall = Autoinstall.query().get(autoinstall)
 
 
             self.autoinstall = Autoinstall.query().get(autoinstall)
 
 
@@ -218,7 +218,7 @@ def testAdmin(user, admin, machine):
     if admin is None:
         return None
     if machine is not None and admin == machine.administrator:
     if admin is None:
         return None
     if machine is not None and admin == machine.administrator:
-        return None
+        return admin
     if admin == user:
         return admin
     if ':' not in admin:
     if admin == user:
         return admin
     if ':' not in admin:
@@ -273,13 +273,15 @@ def testName(user, name, machine=None):
         return None
     try:
         hostname = '%s.%s.' % (name, config.dns.domains[0])
         return None
     try:
         hostname = '%s.%s.' % (name, config.dns.domains[0])
+        resolver = dns.resolver.Resolver()
+        resolver.nameservers = ['127.0.0.1']
         try:
         try:
-            dns.resolver.query(hostname, 'A')
+            resolver.query(hostname, 'A')
         except dns.resolver.NoAnswer, e:
             # If we can get the TXT record, then we can verify it's
             # reserved. If this lookup fails, let it bubble up and be
             # dealt with
         except dns.resolver.NoAnswer, e:
             # If we can get the TXT record, then we can verify it's
             # reserved. If this lookup fails, let it bubble up and be
             # dealt with
-            answer = dns.resolver.query(hostname, 'TXT')
+            answer = resolver.query(hostname, 'TXT')
             txt = answer[0].strings[0]
             if txt.startswith('reserved'):
                 raise InvalidInput('name', name, 'The name you have requested has been %s. For more information, contact us at %s' % (txt, config.dns.contact))
             txt = answer[0].strings[0]
             if txt.startswith('reserved'):
                 raise InvalidInput('name', name, 'The name you have requested has been %s. For more information, contact us at %s' % (txt, config.dns.contact))