0

次のように、グループ DN で Active Directory グループの詳細を取得しようとしています。

1- LDAP に接続します。

public static LdapContext connectToLdap(String host,
            String userDN, String userPassword,
            boolean ssl) throws Exception {

        System.out.println("connectToLdap");

        String hostPrefix = "ldap";
        String ldapPort = "389";
        if (ssl) {
            hostPrefix = "ldaps";
            ldapPort = "636";
        }
        String providerUrl = hostPrefix + "://" + host + ":" + ldapPort;
        //System.out.println("####### LDAP URL: " + providerUrl);
        LdapContext ldapContext;
        Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
        ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        ldapEnv.put(Context.PROVIDER_URL, providerUrl);
        ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
        ldapEnv.put(Context.SECURITY_PRINCIPAL, userDN);
        ldapEnv.put(Context.SECURITY_CREDENTIALS, userPassword);
        ldapEnv.put("com.sun.jndi.ldap.read.timeout", 1000 * 10 + "");
        if (ssl) {
            ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
        }
        ldapEnv.put(Context.REFERRAL, "ignore");
        try {
            ldapContext = new InitialLdapContext(ldapEnv, null);           
            System.out.println("success connection to ldap");
            return ldapContext;
        } catch (Exception e) {
            System.out.println("failure connection to ldap");
            e.printStackTrace();
            return null;
        }
    }

2- グループメソッドを見つける:

public static boolean isGroupExist(LdapContext ldapContext,
            String domain, String groupDN) {

        boolean exist = false;

        try {


            SearchControls searchCtls = new SearchControls();
            searchCtls.setTimeLimit(1000 * 10);

            String returnedAttrs[] = {"distinguishedName","cn"};
            searchCtls.setReturningAttributes(returnedAttrs);

            searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

            String searchFilter = "(&(objectClass=group)(distinguishedName=" + groupDN + "))";

            NamingEnumeration<SearchResult> results = ldapContext.search(
                    domain, searchFilter, searchCtls);

            while (results.hasMoreElements()) {
                System.out.println("Success to retrieve active directory group with dn: " + groupDN);
                SearchResult sr = (SearchResult) results.next();
                Attributes attrs = sr.getAttributes();
                String cn=attrs.get("cn").toString();
                System.out.println(cn);
                exist=true;
            }

        } catch (Exception e) {
            System.out.println("Fail to search in active directory groups");
            e.printStackTrace();
            return false;
        }

        return exist;
}

しかし、isGroupExist メソッドを使用しようとすると、次の例外が発生します。

javax.naming.OperationNotSupportedException: [LDAP: error code 12 - 0000217A: SvcErr: DSID-0314020F, problem 5010 (UNAVAIL_EXTENSION), data 0

この例外が発生する理由と修正方法を教えてください。

4

2 に答える 2