001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.jmeter.protocol.ldap.sampler;
020:
021: import java.util.Hashtable;
022:
023: import javax.naming.Context;
024: import javax.naming.NamingEnumeration;
025: import javax.naming.NamingException; // import javax.naming.directory.Attributes;
026: import javax.naming.directory.BasicAttributes;
027: import javax.naming.directory.DirContext;
028: import javax.naming.directory.InitialDirContext;
029: import javax.naming.directory.ModificationItem;
030: import javax.naming.directory.SearchControls; // import javax.naming.directory.SearchResult;
031:
032: import org.apache.jorphan.logging.LoggingManager;
033: import org.apache.log.Logger;
034:
035: /**
036: * Ldap Client class is main class to create, modify, search and delete all the
037: * LDAP functionality available.
038: *
039: * @author T.Elanjchezhiyan(chezhiyan@siptech.co.in) - Sip Technologies and
040: * Exports Ltd. Created Apr 29 2003 11:00 AM
041: */
042: public class LdapClient {
043: transient private static Logger log = LoggingManager
044: .getLoggerForClass();
045:
046: private DirContext dirContext = null;
047:
048: /**
049: * Constructor for the LdapClient object.
050: */
051: public LdapClient() {
052: }
053:
054: /**
055: * Connect to server.
056: */
057: public void connect(String host, String port, String rootdn,
058: String username, String password) throws NamingException {
059: Hashtable env = new Hashtable();
060: env.put(Context.INITIAL_CONTEXT_FACTORY,
061: "com.sun.jndi.ldap.LdapCtxFactory"); //$NON-NLS-1$
062: env.put(Context.PROVIDER_URL,
063: "ldap://" + host + ":" + port + "/" + rootdn); //$NON-NLS-1$ $NON-NLS-2$ $NON-NLS-3$
064: env.put(Context.REFERRAL, "throw"); //$NON-NLS-1$
065: env.put(Context.SECURITY_CREDENTIALS, password);
066: env.put(Context.SECURITY_PRINCIPAL, username);
067: dirContext = new InitialDirContext(env);
068: }
069:
070: /**
071: * Disconnect from the server.
072: */
073: public void disconnect() {
074: try {
075: if (dirContext != null) {
076: dirContext.close();
077: dirContext = null;
078: }
079: } catch (NamingException e) {
080: log.error("Ldap client - ", e);
081: }
082: }
083:
084: /**
085: * Filter the data in the ldap directory for the given search base.
086: *
087: * @param searchBase
088: * where the search should start
089: * @param searchFilter
090: * filter this value from the base
091: */
092: public boolean searchTest(String searchBase, String searchFilter)
093: throws NamingException {
094: // System.out.println("Base="+searchBase+" Filter="+searchFilter);
095: SearchControls searchcontrols = new SearchControls(
096: SearchControls.SUBTREE_SCOPE, 1L, // count limit
097: 0, // time limit
098: null,// attributes (null = all)
099: false,// return object ?
100: false);// dereference links?
101: NamingEnumeration ne = dirContext.search(searchBase,
102: searchFilter, searchcontrols);
103: // System.out.println("Loop "+ne.toString()+" "+ne.hasMore());
104: // while (ne.hasMore()){
105: // Object tmp = ne.next();
106: // System.out.println(tmp.getClass().getName());
107: // SearchResult sr = (SearchResult) tmp;
108: // Attributes at = sr.getAttributes();
109: // System.out.println(at.get("cn"));
110: // }
111: // System.out.println("Done "+ne.hasMore());
112: return ne.hasMore();
113: }
114:
115: /**
116: * Modify the attribute in the ldap directory for the given string.
117: *
118: * @param mods
119: * add all the entry in to the ModificationItem
120: * @param string
121: * the string (dn) value
122: */
123: public void modifyTest(ModificationItem[] mods, String string)
124: throws NamingException {
125: dirContext.modifyAttributes(string, mods);
126: }
127:
128: /**
129: * Create the attribute in the ldap directory for the given string.
130: *
131: * @param basicattributes
132: * add all the entry in to the basicattribute
133: * @param string
134: * the string (dn) value
135: */
136: public void createTest(BasicAttributes basicattributes,
137: String string) throws NamingException {
138: // DirContext dc = //TODO perhaps return this?
139: dirContext.createSubcontext(string, basicattributes);
140: }
141:
142: /**
143: * Delete the attribute from the ldap directory.
144: *
145: * @param string
146: * the string (dn) value
147: */
148: public void deleteTest(String string) throws NamingException {
149: dirContext.destroySubcontext(string);
150: }
151: }
|