次のように、グループ 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
この例外が発生する理由と修正方法を教えてください。