⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldap.py

📁 samba最新软件
💻 PY
📖 第 1 页 / 共 3 页
字号:
#!/usr/bin/python# -*- coding: utf-8 -*-# This is a port of the original in testprogs/ejs/ldap.jsimport getoptimport optparseimport syssys.path.append("bin/python")import samba.getopt as optionsfrom samba.auth import system_sessionfrom ldb import (SCOPE_SUBTREE, SCOPE_ONELEVEL, SCOPE_BASE, LdbError,                 LDB_ERR_NO_SUCH_OBJECT, LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS,                 LDB_ERR_ENTRY_ALREADY_EXISTS, LDB_ERR_UNWILLING_TO_PERFORM,                 LDB_ERR_NOT_ALLOWED_ON_NON_LEAF, LDB_ERR_OTHER)from samba import Ldbfrom subunit import SubunitTestRunnerfrom samba import paramimport unittestparser = optparse.OptionParser("ldap [options] <host>")sambaopts = options.SambaOptions(parser)parser.add_option_group(sambaopts)parser.add_option_group(options.VersionOptions(parser))# use command line creds if availablecredopts = options.CredentialsOptions(parser)parser.add_option_group(credopts)opts, args = parser.parse_args()if len(args) < 1:    parser.print_usage()    sys.exit(1)host = args[0]lp = sambaopts.get_loadparm()creds = credopts.get_credentials(lp)class BasicTests(unittest.TestCase):    def delete_force(self, ldb, dn):        try:            ldb.delete(dn)        except LdbError, (num, _):             self.assertEquals(num, LDB_ERR_NO_SUCH_OBJECT)    def find_basedn(self, ldb):        res = ldb.search(base="", expression="", scope=SCOPE_BASE,                          attrs=["defaultNamingContext"])        self.assertEquals(len(res), 1)        return res[0]["defaultNamingContext"][0]    def find_configurationdn(self, ldb):        res = ldb.search(base="", expression="", scope=SCOPE_BASE, attrs=["configurationNamingContext"])        self.assertEquals(len(res), 1)        return res[0]["configurationNamingContext"][0]    def find_schemadn(self, ldb):        res = ldb.search(base="", expression="", scope=SCOPE_BASE, attrs=["schemaNamingContext"])        self.assertEquals(len(res), 1)        return res[0]["schemaNamingContext"][0]    def setUp(self):        self.ldb = ldb        self.gc_ldb = gc_ldb        self.base_dn = self.find_basedn(ldb)        self.configuration_dn = self.find_configurationdn(ldb)        self.schema_dn = self.find_schemadn(ldb)        print "baseDN: %s\n" % self.base_dn        self.delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn)        self.delete_force(self.ldb, "cn=ldaptestgroup,cn=users," + self.base_dn)    def test_group_add_invalid_member(self):        """Testing group add with invalid member"""        try:            self.ldb.add({                "dn": "cn=ldaptestgroup,cn=uSers," + self.base_dn,                "objectclass": "group",                "member": "cn=ldaptestuser,cn=useRs," + self.base_dn})            self.fail()        except LdbError, (num, _):             self.assertEquals(num, LDB_ERR_NO_SUCH_OBJECT)    def test_all(self):        """Basic tests"""        self.delete_force(self.ldb, "cn=ldaptestuser,cn=users," + self.base_dn)        print "Testing user add"        ldb.add({        "dn": "cn=ldaptestuser,cn=uSers," + self.base_dn,        "objectclass": ["user", "person"],        "cN": "LDAPtestUSER",        "givenname": "ldap",        "sn": "testy"})        ldb.add({            "dn": "cn=ldaptestgroup,cn=uSers," + self.base_dn,            "objectclass": "group",            "member": "cn=ldaptestuser,cn=useRs," + self.base_dn})        self.delete_force(ldb, "cn=ldaptestcomputer,cn=computers," + self.base_dn)        ldb.add({            "dn": "cn=ldaptestcomputer,cn=computers," + self.base_dn,            "objectclass": "computer",            "cN": "LDAPtestCOMPUTER"})        self.delete_force(self.ldb, "cn=ldaptest2computer,cn=computers," + self.base_dn)        ldb.add({"dn": "cn=ldaptest2computer,cn=computers," + self.base_dn,            "objectClass": "computer",            "cn": "LDAPtest2COMPUTER",            "userAccountControl": "4096",            "displayname": "ldap testy"})        print "Testing attribute or value exists behaviour"        try:            ldb.modify_ldif("""dn: cn=ldaptest2computer,cn=computers,""" + self.base_dn + """changetype: modifyreplace: servicePrincipalNameservicePrincipalName: host/ldaptest2computerservicePrincipalName: host/ldaptest2computerservicePrincipalName: cifs/ldaptest2computer""")        except LdbError, (num, msg):            self.assertEquals(num, LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS)            ldb.modify_ldif("""dn: cn=ldaptest2computer,cn=computers,""" + self.base_dn + """changetype: modifyreplace: servicePrincipalNameservicePrincipalName: host/ldaptest2computerservicePrincipalName: cifs/ldaptest2computer""")            try:                ldb.modify_ldif("""dn: cn=ldaptest2computer,cn=computers,""" + self.base_dn + """changetype: modifyadd: servicePrincipalNameservicePrincipalName: host/ldaptest2computer""")            except LdbError, (num, msg):                self.assertEquals(num, LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS)                        print "Testing ranged results"            ldb.modify_ldif("""dn: cn=ldaptest2computer,cn=computers,""" + self.base_dn + """changetype: modifyreplace: servicePrincipalName""")                        ldb.modify_ldif("""dn: cn=ldaptest2computer,cn=computers,""" + self.base_dn + """changetype: modifyadd: servicePrincipalNameservicePrincipalName: host/ldaptest2computer0servicePrincipalName: host/ldaptest2computer1servicePrincipalName: host/ldaptest2computer2servicePrincipalName: host/ldaptest2computer3servicePrincipalName: host/ldaptest2computer4servicePrincipalName: host/ldaptest2computer5servicePrincipalName: host/ldaptest2computer6servicePrincipalName: host/ldaptest2computer7servicePrincipalName: host/ldaptest2computer8servicePrincipalName: host/ldaptest2computer9servicePrincipalName: host/ldaptest2computer10servicePrincipalName: host/ldaptest2computer11servicePrincipalName: host/ldaptest2computer12servicePrincipalName: host/ldaptest2computer13servicePrincipalName: host/ldaptest2computer14servicePrincipalName: host/ldaptest2computer15servicePrincipalName: host/ldaptest2computer16servicePrincipalName: host/ldaptest2computer17servicePrincipalName: host/ldaptest2computer18servicePrincipalName: host/ldaptest2computer19servicePrincipalName: host/ldaptest2computer20servicePrincipalName: host/ldaptest2computer21servicePrincipalName: host/ldaptest2computer22servicePrincipalName: host/ldaptest2computer23servicePrincipalName: host/ldaptest2computer24servicePrincipalName: host/ldaptest2computer25servicePrincipalName: host/ldaptest2computer26servicePrincipalName: host/ldaptest2computer27servicePrincipalName: host/ldaptest2computer28servicePrincipalName: host/ldaptest2computer29""")            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE,                              attrs=["servicePrincipalName;range=0-*"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            #print len(res[0]["servicePrincipalName;range=0-*"])            self.assertEquals(len(res[0]["servicePrincipalName;range=0-*"]), 30)            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=0-19"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            # print res[0]["servicePrincipalName;range=0-19"].length            self.assertEquals(len(res[0]["servicePrincipalName;range=0-19"]), 20)                        res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=0-30"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=0-*"]), 30)            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=0-40"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=0-*"]), 30)            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=30-40"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=30-*"]), 0)                        res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=10-40"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=10-*"]), 20)            # pos_11 = res[0]["servicePrincipalName;range=10-*"][18]            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=11-40"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=11-*"]), 19)            # print res[0]["servicePrincipalName;range=11-*"][18]            # print pos_11            # self.assertEquals((res[0]["servicePrincipalName;range=11-*"][18]), pos_11)            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName;range=11-15"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            self.assertEquals(len(res[0]["servicePrincipalName;range=11-15"]), 5)            # self.assertEquals(res[0]["servicePrincipalName;range=11-15"][4], pos_11)            res = ldb.search(self.base_dn, expression="(cn=ldaptest2computer))", scope=SCOPE_SUBTREE, attrs=["servicePrincipalName"])            self.assertEquals(len(res), 1, "Could not find (cn=ldaptest2computer)")            # print res[0]["servicePrincipalName"][18]            # print pos_11            self.assertEquals(len(res[0]["servicePrincipalName"]), 30)            # self.assertEquals(res[0]["servicePrincipalName"][18], pos_11)        self.delete_force(self.ldb, "cn=ldaptestuser2,cn=users," + self.base_dn)        ldb.add({            "dn": "cn=ldaptestuser2,cn=useRs," + self.base_dn,            "objectClass": ["person", "user"],            "cn": "LDAPtestUSER2",            "givenname": "testy",            "sn": "ldap user2"})        print "Testing Ambigious Name Resolution"        # Testing ldb.search for (&(anr=ldap testy)(objectClass=user))        res = ldb.search(expression="(&(anr=ldap testy)(objectClass=user))")        self.assertEquals(len(res), 3, "Could not find (&(anr=ldap testy)(objectClass=user))")        # Testing ldb.search for (&(anr=testy ldap)(objectClass=user))        res = ldb.search(expression="(&(anr=testy ldap)(objectClass=user))")        self.assertEquals(len(res), 2, "Found only %d for (&(anr=testy ldap)(objectClass=user))" % len(res))        # Testing ldb.search for (&(anr=ldap)(objectClass=user))        res = ldb.search(expression="(&(anr=ldap)(objectClass=user))")        self.assertEquals(len(res), 4, "Found only %d for (&(anr=ldap)(objectClass=user))" % len(res))        # Testing ldb.search for (&(anr==ldap)(objectClass=user))        res = ldb.search(expression="(&(anr==ldap)(objectClass=user))")        self.assertEquals(len(res), 1, "Could not find (&(anr==ldap)(objectClass=user)). Found only %d for (&(anr=ldap)(objectClass=user))" % len(res))        self.assertEquals(str(res[0].dn), ("CN=ldaptestuser,CN=Users," + self.base_dn))        self.assertEquals(res[0]["cn"][0], "ldaptestuser")        self.assertEquals(res[0]["name"], "ldaptestuser")        # Testing ldb.search for (&(anr=testy)(objectClass=user))        res = ldb.search(expression="(&(anr=testy)(objectClass=user))")        self.assertEquals(len(res), 2, "Found only %d for (&(anr=testy)(objectClass=user))" % len(res))        # Testing ldb.search for (&(anr=ldap testy)(objectClass=user))        res = ldb.search(expression="(&(anr=testy ldap)(objectClass=user))")        self.assertEquals(len(res), 2, "Found only %d for (&(anr=ldap testy)(objectClass=user))" % len(res))        # Testing ldb.search for (&(anr==ldap testy)(objectClass=user))        res = ldb.search(expression="(&(anr==testy ldap)(objectClass=user))")        self.assertEquals(len(res), 1, "Found only %d for (&(anr==ldap testy)(objectClass=user))" % len(res))        self.assertEquals(str(res[0].dn), ("CN=ldaptestuser,CN=Users," + self.base_dn))        self.assertEquals(res[0]["cn"][0], "ldaptestuser")        self.assertEquals(res[0]["name"][0], "ldaptestuser")        # Testing ldb.search for (&(anr==testy ldap)(objectClass=user))        res = ldb.search(expression="(&(anr==testy ldap)(objectClass=user))")        self.assertEquals(len(res), 1, "Could not find (&(anr==testy ldap)(objectClass=user))")        self.assertEquals(str(res[0].dn), ("CN=ldaptestuser,CN=Users," + self.base_dn))        self.assertEquals(res[0]["cn"][0], "ldaptestuser")        self.assertEquals(res[0]["name"][0], "ldaptestuser")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -