diff --git a/daemons/ganeti-rapi b/daemons/ganeti-rapi
index 5251652342ccd08546426088f4b053e35fbbc231..643fcf91c58e4be264e2e114bd4fde0e342f097c 100755
--- a/daemons/ganeti-rapi
+++ b/daemons/ganeti-rapi
@@ -45,6 +45,7 @@ from ganeti import ssconf
 from ganeti import luxi
 from ganeti import serializer
 from ganeti import compat
+from ganeti import utils
 from ganeti.rapi import connector
 
 import ganeti.http.auth   # pylint: disable-msg=W0611
@@ -102,15 +103,17 @@ class RemoteApiHttpServer(http.auth.HttpServerRequestAuthentication,
     @param filename: Path to file
 
     """
-    if not os.path.isfile(constants.RAPI_USERS_FILE):
-      logging.warning("Users file %s not found", filename)
+    try:
+      contents = utils.ReadFile(filename)
+    except EnvironmentError, err:
+      logging.warning("Error while reading %s: %s", filename, err)
       return False
 
     try:
-      users = http.auth.ReadPasswordFile(filename)
+      users = http.auth.ParsePasswordFile(contents)
     except Exception, err: # pylint: disable-msg=W0703
       # We don't care about the type of exception
-      logging.error("Error while reading %s: %s", filename, err)
+      logging.error("Error while parsing %s: %s", filename, err)
       return False
 
     self._users = users
diff --git a/lib/http/auth.py b/lib/http/auth.py
index f66f54bf9eba186c7bb0b33b04cdf78f86efd410..f6e78202b100af15a5c3905f8fb89fe7ad5255b3 100644
--- a/lib/http/auth.py
+++ b/lib/http/auth.py
@@ -27,7 +27,6 @@ import re
 import base64
 import binascii
 
-from ganeti import utils
 from ganeti import compat
 from ganeti import http
 
@@ -287,8 +286,8 @@ class PasswordFileUser(object):
     self.options = options
 
 
-def ReadPasswordFile(file_name):
-  """Reads a password file.
+def ParsePasswordFile(contents):
+  """Parses the contents of a password file.
 
   Lines in the password file are of the following format::
 
@@ -306,7 +305,7 @@ def ReadPasswordFile(file_name):
   """
   users = {}
 
-  for line in utils.ReadFile(file_name).splitlines():
+  for line in contents.splitlines():
     line = line.strip()
 
     # Ignore empty lines and comments
diff --git a/test/ganeti.http_unittest.py b/test/ganeti.http_unittest.py
index 3180c7ca0fdd47a195eda4f1607813512ebd0630..76577ea6950632f994ebd27f9d4dcb217409c497 100755
--- a/test/ganeti.http_unittest.py
+++ b/test/ganeti.http_unittest.py
@@ -26,6 +26,7 @@ import os
 import unittest
 import time
 import tempfile
+from cStringIO import StringIO
 
 from ganeti import http
 
@@ -290,32 +291,24 @@ class TestHttpServerRequestAuthentication(unittest.TestCase):
           self.assert_(ac.called)
 
 
-class TestReadPasswordFile(testutils.GanetiTestCase):
-  def setUp(self):
-    testutils.GanetiTestCase.setUp(self)
-
-    self.tmpfile = tempfile.NamedTemporaryFile()
-
+class TestReadPasswordFile(unittest.TestCase):
   def testSimple(self):
-    self.tmpfile.write("user1 password")
-    self.tmpfile.flush()
-
-    users = http.auth.ReadPasswordFile(self.tmpfile.name)
+    users = http.auth.ParsePasswordFile("user1 password")
     self.assertEqual(len(users), 1)
     self.assertEqual(users["user1"].password, "password")
     self.assertEqual(len(users["user1"].options), 0)
 
   def testOptions(self):
-    self.tmpfile.write("# Passwords\n")
-    self.tmpfile.write("user1 password\n")
-    self.tmpfile.write("\n")
-    self.tmpfile.write("# Comment\n")
-    self.tmpfile.write("user2 pw write,read\n")
-    self.tmpfile.write("   \t# Another comment\n")
-    self.tmpfile.write("invalidline\n")
-    self.tmpfile.flush()
-
-    users = http.auth.ReadPasswordFile(self.tmpfile.name)
+    buf = StringIO()
+    buf.write("# Passwords\n")
+    buf.write("user1 password\n")
+    buf.write("\n")
+    buf.write("# Comment\n")
+    buf.write("user2 pw write,read\n")
+    buf.write("   \t# Another comment\n")
+    buf.write("invalidline\n")
+
+    users = http.auth.ParsePasswordFile(buf.getvalue())
     self.assertEqual(len(users), 2)
     self.assertEqual(users["user1"].password, "password")
     self.assertEqual(len(users["user1"].options), 0)