예제 #1
0
파일: iscsi.py 프로젝트: rollandf/vdsm
def readSessionInfo(sessionID):
    iscsi_session = getIscsiSessionPath(sessionID)
    iscsi_connection = getIscsiConnectionPath(sessionID)

    if not os.path.isdir(iscsi_session) or not os.path.isdir(iscsi_connection):
        raise OSError(errno.ENOENT, "No such session")

    iqn = sysfs.read(os.path.join(iscsi_session, "targetname"), default="")
    iface = sysfs.read(os.path.join(iscsi_session, "ifacename"), default="")
    tpgt = sysfs.read_int(os.path.join(iscsi_session, "tpgt"))
    username = sysfs.read(os.path.join(iscsi_session, "username"), default="")
    password = sysfs.read_password(os.path.join(iscsi_session, "password"),
                                   default="")
    ip = sysfs.read(os.path.join(iscsi_connection, "persistent_address"),
                    default="")
    port = sysfs.read_int(os.path.join(iscsi_connection, "persistent_port"))

    # iscsi_host is available only when the session exists.
    iscsi_host = getIscsiHostPath(sessionID)
    netdev = sysfs.read(os.path.join(iscsi_host, "netdev"), default="")
    if netdev in ["<NULL>", "(null)"]:
        netdev = None

    iface = IscsiInterface(iface, netIfaceName=netdev)
    portal = IscsiPortal(ip, port)
    target = IscsiTarget(portal, tpgt, iqn)

    # NOTE: ChapCredentials must match the way we initialize username and
    # password when receiving request from engine in
    # hsm._connectionDict2ConnectionInfo().
    # iscsi reports empty user/password as "<NULL>" (RHEL5) or "(null)"
    # (RHEL6);  empty values are stored as None.

    if username in ["<NULL>", "(null)", ""]:
        username = None
    if password.value in ["<NULL>", "(null)", ""]:
        password = None
    cred = None
    if username or password:
        cred = ChapCredentials(username, password)

    return IscsiSession(sessionID, iface, target, cred)
예제 #2
0
파일: sysfs_test.py 프로젝트: nirs/vdsm
 def test_read_password_error(self):
     with self.assertRaises(EnvironmentError):
         sysfs.read_password(os.getcwd())
예제 #3
0
파일: sysfs_test.py 프로젝트: nirs/vdsm
 def test_read_password_missing_default(self):
     self.assertEqual(sysfs.read_password("/no/such/path", ""),
                      password.ProtectedPassword(""))
예제 #4
0
파일: sysfs_test.py 프로젝트: nirs/vdsm
 def test_read_password_missing_no_default(self):
     with self.assertRaises(EnvironmentError):
         sysfs.read_password("/no/such/path")
예제 #5
0
파일: sysfs_test.py 프로젝트: nirs/vdsm
 def test_read_password_strip(self):
     with temporaryPath(data=b" password\n ") as path:
         self.assertEqual(sysfs.read_password(path),
                          password.ProtectedPassword("password"))
예제 #6
0
 def test_read_password_error(self):
     with self.assertRaises(EnvironmentError):
         sysfs.read_password(os.getcwd())
예제 #7
0
 def test_read_password_missing_no_default(self):
     with self.assertRaises(EnvironmentError):
         sysfs.read_password("/no/such/path")
예제 #8
0
 def test_read_password_missing_default(self):
     self.assertEqual(sysfs.read_password("/no/such/path", ""),
                      password.ProtectedPassword(""))
예제 #9
0
 def test_read_password_strip(self):
     with temporaryPath(data=b" password\n ") as path:
         self.assertEqual(sysfs.read_password(path),
                          password.ProtectedPassword("password"))