You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cloudstack.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2015/10/24 19:55:27 UTC
[jira] [Commented] (CLOUDSTACK-8647) LDAP Trust AD and Autoimport
[ https://issues.apache.org/jira/browse/CLOUDSTACK-8647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14972774#comment-14972774 ]
ASF GitHub Bot commented on CLOUDSTACK-8647:
--------------------------------------------
Github user remibergsma commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/919#discussion_r42936389
--- Diff: test/integration/component/test_ldap_autoImport.py ---
@@ -0,0 +1,663 @@
+
+from marvin.cloudstackTestCase import cloudstackTestCase
+#from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import (updateConfiguration,
+ createAccount,
+ deleteAccount,
+ addLdapConfiguration,
+ linkDomainToLdap, #temujin
+ deleteLdapConfiguration, createDomain, deleteDomain, lockAccount, listAccounts,
+ disableAccount)
+from marvin.cloudstackAPI import login
+from marvin.lib.utils import cleanup_resources
+from nose.plugins.attrib import attr
+import telnetlib
+from ddt import ddt, data
+
+
+class1 = 0
+
+
+def addLdapConfiguration1(cls, ldapConfiguration):
+ """
+
+ :param ldapConfiguration
+
+ """
+ cls.chkConfig = checkLdapConfiguration(cls, ldapConfiguration)
+ if not cls.chkConfig:
+ return 0
+
+ # Setup Global settings
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.basedn"
+ updateConfigurationCmd.value = ldapConfiguration['basedn']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.bind.password"
+ updateConfigurationCmd.value = ldapConfiguration['bindpassword']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.bind.principal"
+ updateConfigurationCmd.value = ldapConfiguration['principal']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.email.attribute"
+ updateConfigurationCmd.value = ldapConfiguration['emailAttribute']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.user.object"
+ updateConfigurationCmd.value = ldapConfiguration['userObject']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ updateConfigurationCmd = updateConfiguration.updateConfigurationCmd()
+ updateConfigurationCmd.name = "ldap.username.attribute"
+ updateConfigurationCmd.value = ldapConfiguration['usernameAttribute']
+ updateConfigurationResponse = cls.apiClient.updateConfiguration(
+ updateConfigurationCmd)
+ cls.debug(
+ "updated the parameter %s with value %s" %
+ (updateConfigurationResponse.name,
+ updateConfigurationResponse.value))
+
+ cls.debug("start addLdapConfiguration test")
+
+ ldapServer = addLdapConfiguration.addLdapConfigurationCmd()
+ ldapServer.hostname = ldapConfiguration['hostname']
+ ldapServer.port = ldapConfiguration['port']
+
+ cls.debug("calling addLdapConfiguration API command")
+ try:
+ cls.apiClient.addLdapConfiguration(ldapServer)
+ cls.debug("addLdapConfiguration was successful")
+ return 1
+ except Exception as e:
+ cls.debug("addLdapConfiguration failed %s Check the Passed passed ldap attributes" % e)
+ cls.reason = "addLdapConfiguration failed %s Check the Passed passed ldap attributes" % e
+ return 1
+
+
+def checkLdapConfiguration(cls, ldapConfiguration):
+ """"
+ This function checks the passed ldap server in the configuration is up and running or not.
+ """""
+
+ flag = False
+ try:
+ tn = telnetlib.Telnet(ldapConfiguration['hostname'], ldapConfiguration['port'], timeout=15)
+ if tn is not None:
+ tn.set_debuglevel(1)
+ print tn.msg("Connected to the server")
+ cls.debug("Ldap Server is Up and listening on the port %s" % tn.msg("Connected to the server"))
+ flag = True
+ tn.close()
+ except Exception as e:
+ cls.debug(" Not able to reach the LDAP server ,please check the Services on LDAP %s and exception is %s"
+ % ((ldapConfiguration['hostname']), e))
+ cls.reason = "Not able to reach the LDAP server ,please check the Services on LDAP %s and exception is %s" \
+ % ((ldapConfiguration['hostname']), e)
+
+ return flag
+
+@ddt
+class TestLdap1(cloudstackTestCase):
+ """
+ 17 test cases in this class.
+ """
+
+ @classmethod
+ def setUpClass(cls):
+
+ #configure ldap
+ """
+
+ :type cls: object
+ """
+ testClient = super(TestLdap1, cls).getClsTestClient()
+ cls.api_client = testClient.getApiClient()
+ cls.services = testClient.getParsedTestDataConfig()
+ cls.cleanup = []
+ cls.delflag = 0
+ cls.reason = ""
+
+ ###
+ cls.apiClient = cls.testClient.getApiClient()
+ cls.acct = createAccount.createAccountCmd()
+ cls.acct.accounttype = 0
+ cls.acct.firstname = cls.services[
+ "configurableData"]["ldap_account"]["firstname"]
+ cls.acct.lastname = cls.services[
+ "configurableData"]["ldap_account"]["lastname"]
+ cls.acct.password = cls.services[
+ "configurableData"]["ldap_account"]["password"]
+ cls.acct.username = cls.services[
+ "configurableData"]["ldap_account"]["username"]
+ cls.acct.email = cls.services[
+ "configurableData"]["ldap_account"]["email"]
+ cls.acct.account = cls.services[
+ "configurableData"]["ldap_account"]["username"]
+ cls.acct.domainid = 1
+
+ if cls.acct.firstname == "" or cls.acct.lastname == "" or cls.acct.password == "" or cls.acct.username == "" \
+ or cls.services["configurableData"]["ldap_configuration"]["ldapUsername"] == "" or \
+ cls.acct.account == "" or \
+ cls.services["configurableData"]["ldap_configuration"]["ldapPassword"] == "":
+
+ cls.debug("Please rerun the test by providing values in ldap configuration user details")
+ cls.skipTest("Please rerun the test by providing proper values in configuration file")
+
+ else:
+ cls.delflag = 1
+ cls.acctRes = cls.apiClient.createAccount(cls.acct)
+ #cls.assertEquals(cls.delflag, 1, "LDAP account details are not provided,please check the configuration")
+
+
+ cls.cleanup.append(cls.acctRes)
+
+ cls.ldapconfRes = addLdapConfiguration1(cls,
+ cls.services["configurableData"]["ldap_configuration"])
+
+ if cls.ldapconfRes == 1:
+
+ cls.debug("Ldap Configuration was successful")
+
+ else:
+
+ cls.debug("LDAP Configuration failed with exception")
+
+ if cls.ldapconfRes == 1:
+ global class1
+ class1 = 1
+ cls.cleanup.append(cls.ldapconfRes)
+
+ @classmethod
+ def tearDownClass(cls):
+ #delete ldap configuration
+ """
+ #cleanup includes : delete normal account, remove ldap configuration
+ :type cls: object
+
+ try:
+ cleanup_resources(cls.api_client, cls.cleanup)
+
+ except Exception as tde:
+ raise Exception("Warning: Exception during cleanup : %s" % tde)
+ return
+ """
+ testClient = super(TestLdap1, cls).getClsTestClient()
+ cls.api_client = testClient.getApiClient()
+ cls.services = testClient.getParsedTestDataConfig()
+ try:
+ deleteAcct = deleteAccount.deleteAccountCmd()
+ deleteAcct.id = cls.acctRes.id
+
+ acct_name = cls.acctRes.name
+
+ cls.apiClient.deleteAccount(deleteAcct)
+
+ cls.debug(
+ "Deleted the the following account name %s:" %
+ acct_name)
+
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+
+ if cls.ldapconfRes == 1:
+ ldapserver = deleteLdapConfiguration.deleteLdapConfigurationCmd()
+ ldapserver.hostname = cls.services["configurableData"]["ldap_configuration"]["hostname"]
+
+ try:
+ cls.apiClient.deleteLdapConfiguration(ldapserver)
+ cls.debug("deleteLdapConfiguration was successful")
+ return 1
+ except Exception as e:
+ cls.debug("deleteLdapConfiguration failed %s" % e)
+ return 0
+
+
+
+ def setUp(self):
+
+
+ #create a domain
+ #link ldap to domain
+ self.delflag = 0
+ self.delflag2 = 0
+ self.delflag3 = 0
+ self.delflag4 = 0
+ self.delflag5 = 0
+ self.delflag6 = 0
+
+ self.assertEquals(
+ class1,
+ 1,
+ self.reason)
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.cleanup = []
+
+
+
+ self.domain = createDomain.createDomainCmd()
+ self.domain.name = self.services["configurableData"]["link_ldap_details"]["domain_name"]
+
+ if self.domain.name == "":
+ self.debug("Please rerun the test by providing values in ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file")
+
+ else:
+ self.delflag = 1
+ self.domainRes = self.apiClient.createDomain(self.domain)
+ self.assertEquals(self.delflag, 1, "Domain creation failed,please check the configuration")
+ #return
+ #self.cleanup.append(self.domain)
+
+
+ #here link ldap to domain
+
+ self.ldaplink = linkDomainToLdap.linkDomainToLdapCmd()
+ self.ldaplink.domainid = self.domainRes.id
+ self.ldaplink.accounttype = self.services["configurableData"]["link_ldap_details"]["accounttype"]
+ self.ldaplink.name = self.services["configurableData"]["link_ldap_details"]["name"]
+ self.ldaplink.type = self.services["configurableData"]["link_ldap_details"]["type"]
+
+ if self.services["configurableData"]["link_ldap_details"]["admin"] is not None:
+ self.ldaplink.admin = self.services["configurableData"]["link_ldap_details"]["admin"]
+
+ if self.ldaplink.domainid == "" or self.ldaplink.accounttype == "" or self.ldaplink.name == "" \
+ or self.ldaplink.type == "":
+ self.debug("Please rerun the test by providing values in link_ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file(link ldap)")
+
+ else:
+ self.delflag2 = 1
+ self.ldaplinkRes = self.apiClient.linkDomainToLdap(self.ldaplink)
+ self.assertEquals(self.delflag2, 1, "Linking LDAP failed,please check the configuration")
+
+ loginRes = self._checklogin(
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"],
+ self.services["configurableData"]["link_ldap_details"]["linkLdapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+
+ self.ldapacctIDtemp = self.dbclient.execute(
+ "SELECT uuid FROM account WHERE account_name=" +"'" +
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"] + "'" + " AND removed IS NULL;",
+ db="cloud")
+ self.ldapacctID = self.ldapacctIDtemp[0][0] #unicode
+
+
+
+ self.cleanup.append(self.domainRes)
+ def tearDown(self):
+
+ #remove the link ldap to domain D1
+ #cleanup includes : delete the ldap imported account(s), delete the domain
+
+
+ self.debug("In tear down%s" % self.delflag)
+
+ #deleting ldap account here
+
+ try:
+ deleteAcct2 = deleteAccount.deleteAccountCmd()
+ deleteAcct2.id = self.ldapacctID
+
+ acct_name = self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"]
+
+ self.apiClient.deleteAccount(deleteAcct2)
+
+ self.debug(
+ "Deleted the the following account name %s:" %
+ acct_name)
+
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ #deleting domain here
+ try:
+ deleteDomain1 = deleteDomain.deleteDomainCmd()
+ deleteDomain1.id = self.domainRes.id
+ deleteDomain1.cleanup = 'true'
+
+ domain_name = self.domainRes.name
+
+ self.apiClient.deleteDomain(deleteDomain1)
+
+ self.debug(
+ "Deleted the the following account name %s:" %
+ domain_name)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+ return
+
+
+
+
+ @attr(tags=["advanced", "basic"], required_hardware="false")
+ def test_01_ldap(self):
+ #User is not in LDAP but locally present --> just test the login functionality
+ loginRes = self._checklogin(
+ self.services["configurableData"]["ldap_configuration"]["ldapUsername"],
+ self.services["configurableData"]["ldap_configuration"]["ldapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+
+
+ def test_02_ldap(self):
+ #User is both in LDAP and imported into CS(i.e already logged in once. So just check the log in again)
+ loginRes = self._checklogin(
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"],
+ self.services["configurableData"]["link_ldap_details"]["linkLdapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+
+ def test_03_ldap(self):
+ #User in LDAP, wrong password --> login should fail
+ loginRes = self._checklogin(
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"],
+ "kqwejkfnqpfnn",
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, None, self.reason)
+
+ def test_04_ldap(self):
+ #User is only present locally, password is wrong --> login should fail
+ loginRes = self._checklogin(
+ self.services["configurableData"]["ldap_account"]["username"],
+ "ssdjdijjf",
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, None, self.reason)
+
+ def test_05_ldap(self):
+ #user is not present anywhere --> login should fail
+ loginRes = self._checklogin("qwweqwe", "efweferwgefwg",
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, None, self.reason)
+
+
+ def test_06_ldap(self):
+ #Delete the LDAP user from CS and try to login --> User should be created again
+ #Need account id for this also
+ try:
+ deleteAcct2 = deleteAccount.deleteAccountCmd()
+ deleteAcct2.id = self.ldapacctID
+
+ acct_name = self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"]
+
+ self.apiClient.deleteAccount(deleteAcct2)
+
+ self.debug(
+ "Deleted the the following account name %s:" %
+ acct_name)
+
+ except Exception as e:
+ raise Exception("Warning: Exception during deleting ldap imported account : %s" % e)
+
+ loginRes = self._checklogin(
+ self.services["configurableData"]["ldap_configuration"]["ldapUsername"],
+ self.services["configurableData"]["ldap_configuration"]["ldapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+
+ def test_07_ldap(self):
+ #Lock the user from CS and attempt to login --> login should fail
+ #Need account id for this also
+ # Just use the api that locks the account
+ self.lockAcct = disableAccount.disableAccountCmd()
+ self.lockAcct.lock = 'true'
+ self.lockAcct.account = self.services["configurableData"]["ldap_configuration"]["ldapUsername"]
+ self.lockAcct.domainid = self.domainRes.id
+ self.apiClient.disableAccount(self.lockAcct)
+
+ loginRes = self._checklogin(
+ self.services["configurableData"]["ldap_configuration"]["ldapUsername"],
+ self.services["configurableData"]["ldap_configuration"]["ldapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, None, self.reason)
+
+ def test_09_ldap(self):
+ #Create different domains. and link all of them to LDAP. Check login in each domain --> login should be successful
+ #Test for default domain
+ loginRes = self._checklogin(
+ self.services["configurableData"]["ldap_configuration"]["ldapUsername"],
+ self.services["configurableData"]["ldap_configuration"]["ldapPassword"],
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+
+ #Test for other domains
+
+ self.domain2 = createDomain.createDomainCmd()
+ self.domain2.name = "Domain_2"
+
+ if self.domain2.name == "":
+ self.debug("Please rerun the test by providing values in ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file")
+
+ else:
+ self.delflag3 = 1
+ self.domainRes2 = self.apiClient.createDomain(self.domain2)
+ self.assertEquals(self.delflag3, 1, "Domain creation failed,please check the configuration")
+ #return
+
+ #here link ldap to domain
+
+ self.ldaplink2 = linkDomainToLdap.linkDomainToLdapCmd()
+ self.ldaplink2.domainid = self.domainRes2.id
+ self.ldaplink2.accounttype = self.services["configurableData"]["link_ldap_details"]["accounttype"]
+ self.ldaplink2.name = self.services["configurableData"]["link_ldap_details"]["name"]
+ self.ldaplink2.type = self.services["configurableData"]["link_ldap_details"]["type"]
+
+ if self.services["configurableData"]["link_ldap_details"]["admin"] is not None:
+ self.ldaplink2.admin = self.services["configurableData"]["link_ldap_details"]["admin"]
+
+ if self.ldaplink2.domainid == "" or self.ldaplink2.accounttype == "" or self.ldaplink2.name == "" \
+ or self.ldaplink2.type == "":
+ self.debug("Please rerun the test by providing values in link_ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file(link ldap)")
+
+ else:
+ self.delflag4 = 1
+ self.ldaplinkRes2 = self.apiClient.linkDomainToLdap(self.ldaplink2)
+ self.assertEquals(self.delflag4, 1, "Linking LDAP failed,please check the configuration")
+
+ loginRes = self._checklogin(
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"],
+ self.services["configurableData"]["link_ldap_details"]["linkLdapPassword"],
+ self.domain2.name,
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+ #Domain 2 ends here
+ #Domain 3 starts here
+
+ self.domain3 = createDomain.createDomainCmd()
+ self.domain3.name = "Domain_3"
+
+ if self.domain3.name == "":
+ self.debug("Please rerun the test by providing values in ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file")
+
+ else:
+ self.delflag5 = 1
+ self.domainRes3 = self.apiClient.createDomain(self.domain3)
+ self.assertEquals(self.delflag5, 1, "Domain creation failed,please check the configuration")
+ #return
+
+ #here link ldap to domain
+
+ self.ldaplink3 = linkDomainToLdap.linkDomainToLdapCmd()
+ self.ldaplink3.domainid = self.domainRes3.id
+ self.ldaplink3.accounttype = self.services["configurableData"]["link_ldap_details"]["accounttype"]
+ self.ldaplink3.name = self.services["configurableData"]["link_ldap_details"]["name"]
+ self.ldaplink3.type = self.services["configurableData"]["link_ldap_details"]["type"]
+
+ if self.services["configurableData"]["link_ldap_details"]["admin"] is not None:
+ self.ldaplink3.admin = self.services["configurableData"]["link_ldap_details"]["admin"]
+
+ if self.ldaplink3.domainid == "" or self.ldaplink3.accounttype == "" or self.ldaplink3.name == "" \
+ or self.ldaplink3.type == "":
+ self.debug("Please rerun the test by providing values in link_ldap configuration user details")
+ self.skipTest("Please rerun the test by providing proper values in configuration file(link ldap)")
+
+ else:
+ self.delflag6 = 1
+ self.ldaplinkRes3 = self.apiClient.linkDomainToLdap(self.ldaplink3)
+ self.assertEquals(self.delflag6, 1, "Linking LDAP failed,please check the configuration")
+
+ loginRes = self._checklogin(
+ self.services["configurableData"]["link_ldap_details"]["linkLdapUsername"],
+ self.services["configurableData"]["link_ldap_details"]["linkLdapPassword"],
+ self.domain2.name,
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes, 1, self.reason)
+ #domain 3 ends here
+
+ #deleting domain 2 and 3 here
+ try:
+ deleteDomain2 = deleteDomain.deleteDomainCmd()
+ deleteDomain2.id = self.domainRes2.id
+ deleteDomain2.cleanup = 'true'
+
+ domain_name = self.domainRes2.name
+
+ self.apiClient.deleteDomain(deleteDomain2)
+ # self.domainRes.delete(self.apiclient, cleanup=True)
+ self.debug(
+ "Deleted the the following account name %s:" %
+ domain_name)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+
+
+ try:
+ deleteDomain3 = deleteDomain.deleteDomainCmd()
+ deleteDomain3.id = self.domainRes3.id
+ deleteDomain3.cleanup = 'true'
+
+ domain_name = self.domainRes3.name
+
+ self.apiClient.deleteDomain(deleteDomain3)
+ # self.domainRes.delete(self.apiclient, cleanup=True)
+ self.debug(
+ "Deleted the the following account name %s:" %
+ domain_name)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+ return
+
+ def test_14_ldap(self):
+ #Password/domain empty --> login should fail
+ loginRes = self._checklogin("","",
+ self.services["configurableData"]["link_ldap_details"]["domain_name"],
+ method="POST")
+ self.debug(loginRes)
+ self.assertEquals(loginRes,None, self.reason)
+
+ def _checklogin(cls, username, password, domain, method):
+ """
+
+ :param username:
+ :param password:
+
+ """
+ cls.debug("Attempting to login.")
+
+ try:
+ loginParams = login.loginCmd()
+ loginParams.username = username
+ loginParams.password = password
+ loginParams.domain = domain
+ loginRes = cls.apiClient.login(loginParams, method)
+ cls.debug("login response %s" % loginRes)
+ if loginRes is None:
+ cls.debug("login not successful")
+ return 0
+ else:
+ cls.debug("login successful")
+ return 1
+
+ except Exception as p:
+ cls.debug("login operation failed %s" % p)
+ cls.reason = "Login operation Failed %s" % p
+
+
--- End diff --
@sarathkouk Thanks for processing the feedback. Did you also do the PEP8 on the files?
> LDAP Trust AD and Autoimport
> ----------------------------
>
> Key: CLOUDSTACK-8647
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8647
> Project: CloudStack
> Issue Type: Improvement
> Security Level: Public(Anyone can view this level - this is the default.)
> Reporter: Rajani Karuturi
> Assignee: Rajani Karuturi
> Fix For: 4.6.0
>
>
> Today, CloudStack can automatically import LDAP users based on the configuration to a domain or an account. However, any new users in LDAP aren't automatically reflected. The admin has to manually import them again.
> This feature enables admin to map LDAP group/OU to a CloudStack domain and any changes are reflected in ACS as well.
> FS: https://cwiki.apache.org/confluence/display/CLOUDSTACK/WIP%3A+LDAP%3A+Trust+AD+and+Auto+Import
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)