Index: /trunk/packages/invirt-base/python/invirt/remctl.py
===================================================================
--- /trunk/packages/invirt-base/python/invirt/remctl.py	(revision 1613)
+++ /trunk/packages/invirt-base/python/invirt/remctl.py	(revision 1614)
@@ -5,9 +5,13 @@
 from invirt.common import CodeError
 import subprocess
+from socket import getfqdn
 
-def kinit():
+def kinit(principal=None, keytab=None):
     """Kinit with a given username and keytab"""
-    p = subprocess.Popen(['kinit', "-k", "-t", '/etc/invirt/keytab',
-                          'daemon/'+config.web.hostname],
+    if principal is None:
+        principal = 'daemon/' + getfqdn()
+    if keytab is None:
+        keytab = '/etc/invirt/keytab'
+    p = subprocess.Popen(['kinit', "-k", "-t", keytab, principal],
                          stderr=subprocess.PIPE)
     e = p.wait()
@@ -15,17 +19,17 @@
         raise CodeError("Error %s in kinit: %s" % (e, p.stderr.read()))
 
-def checkKinit():
+def checkKinit(principal=None, keytab=None):
     """If we lack tickets, kinit."""
     p = subprocess.Popen(['klist', '-s'])
     if p.wait():
-        kinit()
+        kinit(principal, keytab)
 
-def remctl(*args, **kws):
+def remctl(host, *args, **kws):
     """Perform a remctl and return the output.
 
     kinits if necessary, and outputs errors to stderr.
     """
-    checkKinit()
-    p = subprocess.Popen(['remctl', config.remote.hostname]
+    checkKinit(kws.get('principal'), kws.get('keytab'))
+    p = subprocess.Popen(['remctl', host]
                          + list(args),
                          stdout=subprocess.PIPE,
Index: /trunk/packages/invirt-web/code/controls.py
===================================================================
--- /trunk/packages/invirt-web/code/controls.py	(revision 1613)
+++ /trunk/packages/invirt-web/code/controls.py	(revision 1614)
@@ -10,5 +10,5 @@
 from invirt.config import structs as config
 from invirt.database import Machine, Disk, Type, NIC, CDROM, session, meta
-from invirt.remctl import remctl
+from invirt.remctl import remctl as gen_remctl
 
 # ... and stolen from xend/uuid.py
@@ -23,4 +23,9 @@
                      "%02x" * 6]) % tuple(u)
 # end stolen code
+
+def remctl(*args, **kwargs):
+    return gen_remctl(config.remote.hostname, *args,
+                      principal='daemon/'+config.web.hostname,
+                      **kwargs)
 
 def lvcreate(machine, disk):
