blob: 1f690a045c617287047c651272567ac69ef21da5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.kerberos.client;
import static org.apache.directory.shared.kerberos.codec.types.EncryptionType.AES128_CTS_HMAC_SHA1_96;
import static org.apache.directory.shared.kerberos.codec.types.EncryptionType.AES256_CTS_HMAC_SHA1_96;
import static org.apache.directory.shared.kerberos.codec.types.EncryptionType.DES3_CBC_SHA1_KD;
import static org.apache.directory.shared.kerberos.codec.types.EncryptionType.DES_CBC_MD5;
import static org.apache.directory.shared.kerberos.codec.types.EncryptionType.RC4_HMAC;
import java.util.HashSet;
import java.util.Set;
import org.apache.directory.shared.kerberos.KerberosUtils;
import org.apache.directory.shared.kerberos.codec.types.EncryptionType;
/**
* Configuration class for KDC and changepassword servers.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class KdcConfig
{
/** host name of the Kerberos server */
private String hostName = "localhost";
/** port on which the Kerberos server is listening */
private int kdcPort = 88;
/** port on which the change password server is listening */
private int passwdPort = 464;
/** flag to indicate if the client should use UDP while connecting to Kerberos server */
private boolean useUdp = true;
/** flag to indicate if legacy protocol version 1 should be used while sending the change password request. Default is false, we send version 0xFF80 of rfc3244 */
private boolean useLegacyChngPwdProtocol = false;
/** the timeout of the connection to the Kerberos server */
private int timeout = 60000; // default 1 min
/** the set of encryption types that the client can support, by default this includes all the encryption types supported by ApacheDS */
private Set<EncryptionType> encryptionTypes;
public KdcConfig()
{
encryptionTypes = new HashSet<EncryptionType>();
encryptionTypes.add( AES128_CTS_HMAC_SHA1_96 );
encryptionTypes.add( AES256_CTS_HMAC_SHA1_96 );
encryptionTypes.add( DES_CBC_MD5 );
encryptionTypes.add( DES3_CBC_SHA1_KD );
//FIXME RC4 support is not completely supported
// disabling till DIRKRB-100 gets resolved
//encryptionTypes.add( RC4_HMAC );
//encryptionTypes.add( RC4_HMAC_EXP );
encryptionTypes = KerberosUtils.orderEtypesByStrength( encryptionTypes );
}
public static KdcConfig getDefaultConfig()
{
return new KdcConfig();
}
public String getHostName()
{
return hostName;
}
public void setHostName( String hostName )
{
this.hostName = hostName;
}
public int getKdcPort()
{
return kdcPort;
}
public void setKdcPort( int kdcPort )
{
this.kdcPort = kdcPort;
}
public int getPasswdPort()
{
return passwdPort;
}
public void setPasswdPort( int passwdPort )
{
this.passwdPort = passwdPort;
}
public boolean isUseUdp()
{
return useUdp;
}
public void setUseUdp( boolean useUdp )
{
this.useUdp = useUdp;
}
public boolean isUseLegacyChngPwdProtocol()
{
return useLegacyChngPwdProtocol;
}
public void setUseLegacyChngPwdProtocol( boolean useLegacyChngPwdProtocol )
{
this.useLegacyChngPwdProtocol = useLegacyChngPwdProtocol;
}
public int getTimeout()
{
return timeout;
}
public void setTimeout( int timeout )
{
this.timeout = timeout;
}
public Set<EncryptionType> getEncryptionTypes()
{
return encryptionTypes;
}
public void setEncryptionTypes( Set<EncryptionType> encryptionTypes )
{
this.encryptionTypes = encryptionTypes;
}
@Override
public String toString()
{
return "KdcConfig [hostName=" + hostName + ", kdcPort=" + kdcPort + ", passwdPort=" + passwdPort + ", useUdp="
+ useUdp + ", useLegacyChngPwdProtocol=" + useLegacyChngPwdProtocol + ", timeout=" + timeout
+ ", encryptionTypes=" + encryptionTypes + "]";
}
}