2011-10-20 7 views
5

मैं उस क्षेत्र से एलडीएपी लेआउट/स्कीमा को डुप्लिकेट करने का प्रयास कर रहा हूं, जिसमें मेरे एप्लिकेशन को सौदा करना है- और मैं फिर से बनाने की कोशिश कर रहा हूं + एम्बेडेड UnboundID LDAP सर्वर के साथ स्वचालित परीक्षण के माध्यम से इसका परीक्षण करें।कस्टम स्कीमा बनाना/इन-मेमोरी के लिए मौजूदा स्कीमा में जोड़ें UnboundID LDAP सर्वर

स्थिति इससे निपटने के लिए है उपयोगकर्ता स्कीमा की 'memberOf' सक्रिय निर्देशिका की तरह संपत्ति है ... लेकिन मैं काफी स्मृति में इस ldap के लिए एक 'उपयोगकर्ता' वर्ग को जोड़ने का तरीका यकीन नहीं है।

1) क्या यह संभव है? 2) क्या कोई बेहतर रणनीति है? 3) और मुझे विशेष रूप से क्या करना चाहिए? मैं एक एलडीएपी नौसिखिया हूँ।

नीचे मेरा nonworking कोड है।

धन्यवाद, माइक Kohout

public class TestOpenLdap2 
{ 
    private InMemoryDirectoryServer server; 

    @Before 
    public void start() throws Exception 
    { 
     InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig("dc=com"); 
     config.addAdditionalBindCredentials("cn=admin,ou=People,dc=example,dc=com", "cred"); 
     InMemoryListenerConfig listenerConfig = new InMemoryListenerConfig("test", null, 33390, null, null, null); 
     config.setListenerConfigs(listenerConfig); 
     server = new InMemoryDirectoryServer(config); 
     server.startListening(); 
    } 

    @Test 
    public void testMemberOf() throws Exception 
    { 

     addEntry("dn: dc=com", "objectClass: top", "objectClass: domain", "dc: com"); 

     ObjectClassDefinition oc = new ObjectClassDefinition("10.19.19.78", new String[]{"user"}, "", false, new String[]{"TOP"}, 
                       ObjectClassType.STRUCTURAL, new String[]{"memberOf"}, 
                       new String[]{}, new HashMap()); 
     addEntry("dn: cn=schema2,dc=com", "objectClass: top", "objectClass: ldapSubEntry", "objectClass: subschema", "cn: schema2", 
        "objectClasses: " + oc.toString()); 

     addEntry("dn: dc=people,dc=com", "objectClass: top", "objectClass: domain", "dc: people"); 
     addEntry("dn: dc=groups,dc=com", "objectClass: top", "objectClass: domain", "dc: groups"); 
     addEntry("dn: cn=test-group,dc=groups,dc=com", "objectClass: groupOfUniqueNames", "cn: test group"); 
     addEntry("dn: cn=Testy Tester,dc=people,dc=com", "objectClass: Person", "objectClass: user", "objectClass: organizationalPerson", "sn: Tester", "cn: Testy Tester", "memberOf: cn=test-group,dc=groups,dc=com"); 
    } 

    public void addEntry(String... args) throws LDIFException, LDAPException 
    { 
     LDAPResult result = server.add(args); 
     assert (result.getResultCode().intValue() == 0); 
     System.out.println("added entry:" + Arrays.asList(args)); 
    } 

उत्तर

5

जो कोई आता है भर में इस पता चला है कि नील विल्सन होना करने के लिए भेजा कार्यक्षमता लागू किया गया है दिलचस्पी हो सकती है (कम से कम com.unboundid में: unboundid-ldapsdk: 2.3.1) :)

dn: cn=schema 
changetype: modify 
add: attributetypes 
attributetypes: (1.2.3.4.5.6.7 NAME 'userPrincipalName' DESC 'userPrincipalName as per Active Directory' EQUALITY caseIgnoreMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15') 

dn: cn=schema 
changetype: modify 
delete: objectClasses 
objectClasses: (2.5.6.6 
       NAME 'person' 
       SUP top 
       STRUCTURAL 
       MUST (sn $ 
         cn) 
       MAY (userPassword $ 
         telephoneNumber $ 
         seeAlso $ 
         description) 
       X-ORIGIN 'RFC 4519') 

dn: cn=schema 
changetype: modify 
add: objectClasses 
objectClasses: (2.5.6.6 
       NAME 'person' 
       SUP top 
       STRUCTURAL 
       MUST (sn $ 
         cn $ 
         userPrincipalName) 
       MAY (userPassword $ 
         telephoneNumber $ 
         seeAlso $ 
         description)) 

ध्यान दें कि व्यक्ति क्लास हटा दिया जाना चाहिए:

आप निम्न तरीके से जो एक userPrincipalName विशेषता शामिल हैं के साथ व्यक्ति क्लास की जगह हो सकती है। इसे 'ऑब्जेक्ट क्लासेस' विशेषता के रूप में परिभाषित किया गया है और आपको इसे संदर्भित करने के लिए संपूर्ण परिभाषा निर्दिष्ट करनी होगी। परिभाषा डिफ़ॉल्ट स्कीमा में है जैसा कि नील द्वारा वर्णित है: दस्तावेज़/मानक-स्कीमा।http://docs.oracle.com/cd/E12839_01/oid.1111/e10035/ldif_appendix.htm#CHDCCJIG

+2

मुझे एक डीएन के साथ एक एंट्री जोड़ने में असमर्थ है जो सबस्कमा सबेंट्री डीएन 'सीएन = स्कीमा' त्रुटि के समान है या जब मैं इसे कोशिश करता हूं, एसडीके v.2.3.4 – SelimOber

0

शुद्ध LDAP विचार पर व्यवहार आप उपयोग करना चाहते Referencial वफ़ादारी कहा जाता है और जैसा कि मैंने LDAP SDK for Java

  • में पढ़ सकते हैं यह करने के लिए एक विकल्प प्रदान करता डीएन संचालन को हटाने और संशोधित करने के लिए विशेषताओं के निर्दिष्ट सेट के लिए रेफरेंसियल अखंडता बनाए रखें ...

मैं इस तरह से आपकी मदद नहीं कर सकता।

जहां तक ​​सक्रिय-निर्देशिका एक लक्ष्य है, परीक्षण के लिए एक अच्छी बात एक एडीएएम (सक्रिय Dirctory अनुप्रयोग मोड) स्थापित करना है। यह माइक्रोसॉफ्ट से एक मुफ्त निर्देशिका है जिसे आप एडी स्कीमा और ऑब्जेक्ट्स में डुप्लिकेट करने के लिए उपयोग कर सकते हैं। ADAM is a redistribuable कि आप विंडोज एक्सपी पर भी इंस्टॉल कर सकते हैं। विंडोज सात पर स्थापित करने के लिए आप बेहतर एलडीएस (Lightweight directory service) का उपयोग करें। दोनों एडी स्कीमा और एडी से ऑब्जेक्ट्स माइग्रेट करने के लिए टूल का उपयोग करते हैं।

+0

अजीब बात है आप का उल्लेख करना चाहिए कि-एडम वास्तव में ग्राहक की सेटअप है: LDIF

मैं userPrincipalName कुछ ओरेकल डॉक्स जो कैसे स्कीमा तत्वों को संशोधित करने का वर्णन से परिभाषा विशेषता की नकल की। मेरी बड़ी उम्मीद यह थी कि मैं इकाई परीक्षणों के अंदर अनबाउंडआईडी का उपयोग कर सकता हूं, जिससे यह एडीएएम की तरह दिखता है ताकि यह यूनिट/एकीकरण परीक्षण के लिए उपयोगी हो। –

4

वर्तमान में, इन-मेमोरी निर्देशिका सर्वर ऑनलाइन स्कीमा परिवर्तनों का समर्थन नहीं करता है (यानी, एलडीएपी संशोधित संचालन के माध्यम से सीएन = स्कीमा एंट्री अपडेट करना)। यह मेरी टू-डू सूची पर है, लेकिन यह अभी तक लागू नहीं हुआ है।

हालांकि, अगर आप सर्वर के साथ चलने वाली स्कीमा को कस्टमाइज़ करना चाहते हैं, तो आप बस उस स्कीमा के साथ सर्वर को प्रारंभ कर सकते हैं जिसका आप उपयोग करना चाहते हैं। आप एकाधिक फ़ाइलों में जानकारी से एक स्कीमा बना सकते हैं (और डिफ़ॉल्ट रूप से इन-मेमोरी सर्वर का उपयोग दस्तावेज़/मानक-schema.ldif फ़ाइल में शामिल किया गया है, ताकि आप कस्टम स्कीमा तत्वों के साथ एक दूसरी फ़ाइल जोड़ सकें जो आप चाहते हैं उपयोग करने के लिए)।

नील

+0

जानकारी के लिए धन्यवाद, नील। टू-डू सूची में यह कितना अधिक कार्यक्षमता है, ओह उदार है? साथ ही, क्या आप इसका विशेष रूप से कॉल के माध्यम से server.initializeFromLDIF (true, "/tmp/test.ldif") के माध्यम से प्रारंभ करना चाहते हैं? –

+0

शायद कुछ रियायतों के साथ इस समर्थन को जोड़ने का यह एक बड़ा प्रयास नहीं है (उदाहरण के लिए, यदि आप किसी परिभाषित विशेषता प्रकार के लिए वाक्यविन्यास/मिलान नियमों को बदलते हैं, तो उस विशेषता के साथ मौजूदा प्रविष्टियां अभी भी पुराने व्यवहार का उपयोग करेंगी, और ऑब्जेक्ट में असंगत परिवर्तन कक्षा परिभाषाओं के परिणामस्वरूप कुछ प्रविष्टियां हो सकती हैं जो अब स्कीमा का अनुपालन नहीं करती हैं)। –

+1

साथ ही, कस्टम स्कीमा को कॉन्फ़िगर करने के लिए, सर्वर प्रारंभ करने से पहले InMemoryDirectoryServerConfig.setSchema विधि का उपयोग करें। Schema.getSchema विधियों में से कुछ हैं जो फ़ाइलों का एक सेट लेते हैं जो सामूहिक रूप से स्कीमा बनाने के लिए उपयोग किए जाएंगे। –

संबंधित मुद्दे