001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2006-2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.tools; 028 029 030 import java.util.ArrayList; 031 import java.util.HashMap; 032 import java.util.List; 033 import java.util.Map; 034 035 036 037 038 /** 039 * This class defines options used while creating an LDAP connection 040 * to the server. 041 */ 042 public class LDAPConnectionOptions 043 { 044 045 private boolean reportAuthzID = false; 046 private boolean useSSL = false; 047 private boolean startTLS = false; 048 private boolean saslExternal = false; 049 private boolean usePasswordPolicyControl = false; 050 private SSLConnectionFactory sslConnectionFactory = null; 051 private String saslMechanism = null; 052 private int versionNumber = 3; 053 private Map<String, List<String>> saslProperties = 054 new HashMap<String, List<String>> (); 055 private boolean verbose = false; 056 057 /** 058 * Creates a the connection options instance. 059 * 060 */ 061 public LDAPConnectionOptions() 062 { 063 } 064 065 /** 066 * Set whether to use SSL for the connection or not. 067 * 068 * @param useSSL True if SSL should be used, false otherwise. 069 * 070 */ 071 072 public void setUseSSL(boolean useSSL) 073 { 074 this.useSSL = useSSL; 075 } 076 077 /** 078 * Return the useSSL flag value. 079 * 080 * @return <CODE>true</CODE> if SSL should be used, or <CODE>false</CODE> if 081 * not. 082 */ 083 public boolean useSSL() 084 { 085 return useSSL; 086 } 087 088 /** 089 * Set whether to use startTLS for the connection or not. 090 * 091 * @param startTLS True if startTLS should be used, false otherwise. 092 * 093 */ 094 095 public void setStartTLS(boolean startTLS) 096 { 097 this.startTLS = startTLS; 098 } 099 100 /** 101 * Return the startTLS flag value. 102 * 103 * @return <CODE>true</CODE> if StartTLS should be used, or 104 * <CODE>false</CODE> if not. 105 */ 106 public boolean useStartTLS() 107 { 108 return startTLS; 109 } 110 111 /** 112 * Set whether to use SASL EXTERNAL for the connection or not. 113 * 114 * @param saslExternal True if SASL EXTERNAL should be used, 115 * false otherwise. 116 * 117 */ 118 119 public void setSASLExternal(boolean saslExternal) 120 { 121 this.saslExternal = saslExternal; 122 } 123 124 /** 125 * Return the saslExternal flag value. 126 * 127 * @return <CODE>true</CODE> if SASL EXTERNAL should be used, or 128 * <CODE>false</CODE> if not. 129 */ 130 public boolean useSASLExternal() 131 { 132 return saslExternal; 133 } 134 135 /** 136 * Set the SSL connection factory to use to create SSL connections. 137 * 138 * @param sslConnectionFactory The SSL connection factory. 139 * 140 */ 141 142 public void setSSLConnectionFactory(SSLConnectionFactory sslConnectionFactory) 143 { 144 this.sslConnectionFactory = sslConnectionFactory; 145 } 146 147 /** 148 * Return the SSLConnectionFactory instance. 149 * 150 * @return The SSL connection factory to use when establishing secure 151 * connections. 152 */ 153 public SSLConnectionFactory getSSLConnectionFactory() 154 { 155 return sslConnectionFactory; 156 } 157 158 /** 159 * Set the SASL mechanism used for authentication. 160 * 161 * @param mechanism The SASL mechanism string, in "name=value" form. 162 * 163 * @return <CODE>true</CODE> if the SASL mechanism was set, or 164 * <CODE>false</CODE> if not. 165 */ 166 public boolean setSASLMechanism(String mechanism) 167 { 168 int idx = mechanism.indexOf("="); 169 if(idx == -1) 170 { 171 System.err.println("Invalid SASL mechanism property:" + mechanism); 172 return false; 173 } 174 this.saslMechanism = mechanism.substring(idx+1, mechanism.length()); 175 if(saslMechanism.equalsIgnoreCase("EXTERNAL")) 176 { 177 setSASLExternal(true); 178 } 179 return true; 180 } 181 182 /** 183 * Get the SASL mechanism used for authentication. 184 * 185 * @return The SASL mechanism used for authentication. 186 */ 187 public String getSASLMechanism() 188 { 189 return saslMechanism; 190 } 191 192 /** 193 * Get the SASL options used for authentication. 194 * 195 * @return The SASL options used for authentication. 196 */ 197 public Map<String, List<String>> getSASLProperties() 198 { 199 return saslProperties; 200 } 201 202 /** 203 * Add a property to the list of SASL properties. 204 * 205 * @param property The property (in name=value form) to add to the set of 206 * SASL properties. 207 * 208 * @return <CODE>true</CODE> if the property was set properly, or 209 * <CODE>false</CODE> if not. 210 */ 211 212 public boolean addSASLProperty(String property) 213 { 214 int idx = property.indexOf("="); 215 if(idx == -1) 216 { 217 System.err.println("Invalid SASL property format:" + property); 218 return false; 219 } 220 String key = property.substring(0, idx); 221 String value = property.substring(idx+1, property.length()); 222 List<String> valList = saslProperties.get(key); 223 if(valList == null) 224 { 225 valList = new ArrayList<String> (); 226 } 227 valList.add(value); 228 229 saslProperties.put(key, valList); 230 return true; 231 } 232 233 /** 234 * Set the LDAP version number. 235 * 236 * @param version The LDAP version number. 237 */ 238 public void setVersionNumber(int version) 239 { 240 this.versionNumber = version; 241 } 242 243 /** 244 * Get the LDAP version number. 245 * 246 * @return The LDAP version number. 247 */ 248 public int getVersionNumber() 249 { 250 return this.versionNumber; 251 } 252 253 254 255 /** 256 * Indicates whether to request that the server return the authorization ID in 257 * the bind response. 258 * 259 * @return <CODE>true</CODE> if the server should include the authorization 260 * ID in the bind response, or <CODE>false</CODE> if not. 261 */ 262 public boolean getReportAuthzID() 263 { 264 return reportAuthzID; 265 } 266 267 268 269 /** 270 * Specifies whether to request that the server return the authorization ID in 271 * the bind response. 272 * 273 * @param reportAuthzID Specifies whether to request that the server return 274 * the authorization ID in the bind response. 275 */ 276 public void setReportAuthzID(boolean reportAuthzID) 277 { 278 this.reportAuthzID = reportAuthzID; 279 } 280 281 282 283 /** 284 * Indicates whether to use the password policy control in the bind request. 285 * 286 * @return <CODE>true</CODE> if the password policy control should be 287 * included in the bind request, or <CODE>false</CODE> if not. 288 */ 289 public boolean usePasswordPolicyControl() 290 { 291 return usePasswordPolicyControl; 292 } 293 294 295 296 /** 297 * Specifies whether to use the password policy control in the bind request. 298 * 299 * @param usePasswordPolicyControl Specifies whether to use the password 300 * policy control in the bind request. 301 */ 302 public void setUsePasswordPolicyControl(boolean usePasswordPolicyControl) 303 { 304 this.usePasswordPolicyControl = usePasswordPolicyControl; 305 } 306 307 /** 308 * Indicates whether verbose tracing is enabled. 309 * 310 * @return <CODE>true</CODE> if verbose tracing is enabled. 311 */ 312 public boolean isVerbose() 313 { 314 return verbose; 315 } 316 317 /** 318 * Specifies whether verbose tracing should be enabled. 319 * @param verbose Specifies whether verbose tracing should be enabled. 320 */ 321 public void setVerbose(boolean verbose) 322 { 323 this.verbose = verbose; 324 } 325 } 326