blob: a82cb5d2a317f451bdb332bba4f4588ceaec2356 [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.studio.connection.ui.widgets;
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.api.ldap.model.constants.SaslQoP;
import org.apache.directory.api.ldap.model.constants.SaslSecurityStrength;
import org.apache.directory.api.ldap.model.url.LdapUrl;
import org.apache.directory.api.ldap.model.url.LdapUrl.Extension;
import org.apache.directory.api.util.Strings;
import org.apache.directory.studio.common.ui.CommonUIUtils;
import org.apache.directory.studio.common.ui.HistoryUtils;
import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
import org.apache.directory.studio.connection.core.Connection;
import org.apache.directory.studio.connection.core.ConnectionCoreConstants;
import org.apache.directory.studio.connection.core.ConnectionCorePlugin;
import org.apache.directory.studio.connection.core.ConnectionParameter;
import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod;
import org.apache.directory.studio.connection.core.ConnectionParameter.Krb5Configuration;
import org.apache.directory.studio.connection.core.ConnectionParameter.Krb5CredentialConfiguration;
import org.apache.directory.studio.connection.core.PasswordsKeyStoreManager;
import org.apache.directory.studio.connection.core.jobs.CheckBindRunnable;
import org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage;
import org.apache.directory.studio.connection.ui.ConnectionUIConstants;
import org.apache.directory.studio.connection.ui.ConnectionUIPlugin;
import org.apache.directory.studio.connection.ui.PasswordsKeyStoreManagerUtils;
import org.apache.directory.studio.connection.ui.RunnableContextRunner;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
/**
* The AuthenticationParameterPage is used the edit the authentication parameters of a
* connection.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class AuthenticationParameterPage extends AbstractConnectionParameterPage
{
/** The URL X_AUTH_METHOD constant */
private static final String X_AUTH_METHOD = "X-AUTH-METHOD"; //$NON-NLS-1$
/** The URL anonymous constant */
private static final String X_AUTH_METHOD_ANONYMOUS = "Anonymous"; //$NON-NLS-1$
/** The URL simple constant */
private static final String X_AUTH_METHOD_SIMPLE = "Simple"; //$NON-NLS-1$
/** The URL DIGEST-MD5 constant */
private static final String X_AUTH_METHOD_DIGEST_MD5 = "DIGEST-MD5"; //$NON-NLS-1$
/** The URL CRAM-MD5 constant */
private static final String X_AUTH_METHOD_CRAM_MD5 = "CRAM-MD5"; //$NON-NLS-1$
/** The URL GSSAPI constant */
private static final String X_AUTH_METHOD_GSSAPI = "GSSAPI"; //$NON-NLS-1$
/** The URL X_BIND_USER constant */
private static final String X_BIND_USER = "X-BIND-USER"; //$NON-NLS-1$
/** The URL X_BIND_PASSWORD constant */
private static final String X_BIND_PASSWORD = "X-BIND-PASSWORD"; //$NON-NLS-1$
/** The SASL REALM constant */
private static final String X_SASL_REALM = "X-SASL-REALM"; //$NON-NLS-1$
/** The SASL QOP constant */
private static final String X_SASL_QOP = "X-SASL-QOP"; //$NON-NLS-1$
/** The SASL QOP AUTH-INT constant */
private static final String X_SASL_QOP_AUTH_INT = "AUTH-INT"; //$NON-NLS-1$
/** The SASL QOP AUTH-INT PROV constant */
private static final String X_SASL_QOP_AUTH_INT_PRIV = "AUTH-INT-PRIV"; //$NON-NLS-1$
/** The SASL Security Strength constant */
private static final String X_SASL_SEC_STRENGTH = "X-SASL-SEC-STRENGTH"; //$NON-NLS-1$
/** The SASL Medium security constant */
private static final String X_SASL_SEC_STRENGTH_MEDIUM = "MEDIUM"; //$NON-NLS-1$
/** The SASL Low security constant */
private static final String X_SASL_SEC_STRENGTH_LOW = "LOW"; //$NON-NLS-1$
/** The SASL no-mutual-auth constant */
private static final String X_SASL_NO_MUTUAL_AUTH = "X-SASL-NO-MUTUAL-AUTH"; //$NON-NLS-1$
private static final String X_KRB5_CREDENTIALS_CONF = "X-KRB5-CREDENTIALS-CONF"; //$NON-NLS-1$
private static final String X_KRB5_CREDENTIALS_CONF_OBTAIN_TGT = "OBTAIN-TGT"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG = "X-KRB5-CONFIG"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_FILE = "FILE"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_FILE_FILE = "X-KRB5-CONFIG-FILE"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_MANUAL = "MANUAL"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_MANUAL_REALM = "X-KRB5-REALM"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_MANUAL_KDC_HOST = "X-KRB5-KDC-HOST"; //$NON-NLS-1$
private static final String X_KRB5_CONFIG_MANUAL_KDC_PORT = "X-KRB5-KDC-PORT"; //$NON-NLS-1$
/** The combo to select the authentication method */
private Combo authenticationMethodCombo;
/** The bind user combo with the history of recently used bind users */
private Combo bindPrincipalCombo;
/** The text widget to input bind password */
private Text bindPasswordText;
/** The checkbox to choose if the bind password should be saved on disk */
private Button saveBindPasswordButton;
/** The button to check the authentication parameters */
private Button checkPrincipalPasswordAuthButton;
// SASL stuff
private Composite saslComposite;
private Combo saslRealmText;
private Combo saslQopCombo;
private Combo saslSecurityStrengthCombo;
private Button saslMutualAuthenticationButton;
// Kerberos stuff
private Composite krb5Composite;
private Button krb5CredentialConfigurationUseNativeButton;
private Button krb5CredentialConfigurationObtainTgtButton;
private Button krb5ConfigDefaultButton;
private Button krb5ConfigFileButton;
private Text krb5ConfigFileText;
private Button krb5ConfigManualButton;
private Text krb5ConfigManualRealmText;
private Text krb5ConfigManualHostText;
private Text krb5ConfigManualPortText;
/**
* Gets the authentication method.
*
* @return the authentication method
*/
private ConnectionParameter.AuthenticationMethod getAuthenticationMethod()
{
switch ( authenticationMethodCombo.getSelectionIndex() )
{
case 1:
return ConnectionParameter.AuthenticationMethod.SIMPLE;
case 2:
return ConnectionParameter.AuthenticationMethod.SASL_DIGEST_MD5;
case 3:
return ConnectionParameter.AuthenticationMethod.SASL_CRAM_MD5;
case 4:
return ConnectionParameter.AuthenticationMethod.SASL_GSSAPI;
default:
return ConnectionParameter.AuthenticationMethod.NONE;
}
}
/**
* Gets the bind principal.
*
* @return the bind principal
*/
private String getBindPrincipal()
{
return bindPrincipalCombo.getText();
}
/**
* Gets the bind password.
*
* @return the bind password, null if saving of bind password is disabled
*/
private String getBindPassword()
{
return isSaveBindPassword() ? bindPasswordText.getText() : null;
}
private String getSaslRealm()
{
return saslRealmText.getText();
}
private SaslQoP getSaslQop()
{
switch ( saslQopCombo.getSelectionIndex() )
{
case 1:
return SaslQoP.AUTH_INT;
case 2:
return SaslQoP.AUTH_CONF;
default:
return SaslQoP.AUTH;
}
}
private SaslSecurityStrength getSaslSecurityStrength()
{
switch ( saslSecurityStrengthCombo.getSelectionIndex() )
{
case 1:
return SaslSecurityStrength.MEDIUM;
case 2:
return SaslSecurityStrength.LOW;
default:
return SaslSecurityStrength.HIGH;
}
}
private Krb5CredentialConfiguration getKrb5CredentialProvider()
{
if ( krb5CredentialConfigurationUseNativeButton.getSelection() )
{
return Krb5CredentialConfiguration.USE_NATIVE;
}
else
{
return Krb5CredentialConfiguration.OBTAIN_TGT;
}
}
private Krb5Configuration getKrb5Configuration()
{
if ( krb5ConfigDefaultButton.getSelection() )
{
return Krb5Configuration.DEFAULT;
}
else if ( krb5ConfigFileButton.getSelection() )
{
return Krb5Configuration.FILE;
}
else
{
return Krb5Configuration.MANUAL;
}
}
private int getKdcPort()
{
String krb5ConfigPort = krb5ConfigManualPortText.getText();
if ( Strings.isEmpty( krb5ConfigPort ) )
{
return 0;
}
else
{
return Integer.parseInt( krb5ConfigPort );
}
}
/**
* Returns true if the bind password should be saved on disk.
*
* @return true, if the bind password should be saved on disk
*/
public boolean isSaveBindPassword()
{
return saveBindPasswordButton.getSelection();
}
/**
* Gets a temporary connection with all conection parameter
* entered in this page.
*
* @return a test connection
*/
private Connection getTestConnection()
{
ConnectionParameter connectionParameter = connectionParameterPageModifyListener.getTestConnectionParameters();
return new Connection( connectionParameter );
}
/**
* @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#
* createComposite(org.eclipse.swt.widgets.Composite)
*/
protected void createComposite( Composite parent )
{
// Authentication Method
Composite composite1 = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
Group group1 = BaseWidgetUtils.createGroup( composite1, Messages
.getString( "AuthenticationParameterPage.AuthenticationMethod" ), 1 ); //$NON-NLS-1$
Composite groupComposite = BaseWidgetUtils.createColumnContainer( group1, 1, 1 );
String[] authMethods = new String[]
{
Messages.getString( "AuthenticationParameterPage.AnonymousAuthentication" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.SimpleAuthentication" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.DigestMD5" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.CramMD5" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.GSSAPI" ) //$NON-NLS-1$
};
authenticationMethodCombo = BaseWidgetUtils.createReadonlyCombo( groupComposite, authMethods, 1, 2 );
// Authentication Parameter
Composite composite2 = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
Group group2 = BaseWidgetUtils.createGroup( composite2, Messages
.getString( "AuthenticationParameterPage.AuthenticationParameter" ), 1 ); //$NON-NLS-1$
Composite composite = BaseWidgetUtils.createColumnContainer( group2, 3, 1 );
BaseWidgetUtils.createLabel( composite, Messages.getString( "AuthenticationParameterPage.BindDNOrUser" ), 1 ); //$NON-NLS-1$
String[] dnHistory = HistoryUtils.load( ConnectionUIPlugin.getDefault().getDialogSettings(),
ConnectionUIConstants.DIALOGSETTING_KEY_PRINCIPAL_HISTORY );
bindPrincipalCombo = BaseWidgetUtils.createCombo( composite, dnHistory, -1, 2 );
BaseWidgetUtils.createLabel( composite, Messages.getString( "AuthenticationParameterPage.BindPassword" ), 1 ); //$NON-NLS-1$
bindPasswordText = BaseWidgetUtils.createPasswordText( composite, StringUtils.EMPTY, 2 ); //$NON-NLS-1$
BaseWidgetUtils.createSpacer( composite, 1 );
saveBindPasswordButton = BaseWidgetUtils.createCheckbox( composite, Messages
.getString( "AuthenticationParameterPage.SavePassword" ), 1 ); //$NON-NLS-1$
saveBindPasswordButton.setSelection( true );
checkPrincipalPasswordAuthButton = new Button( composite, SWT.PUSH );
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalAlignment = SWT.RIGHT;
checkPrincipalPasswordAuthButton.setLayoutData( gridData );
checkPrincipalPasswordAuthButton.setText( Messages
.getString( "AuthenticationParameterPage.CheckAuthentication" ) ); //$NON-NLS-1$
checkPrincipalPasswordAuthButton.setEnabled( false );
ScrolledComposite scrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
scrolledComposite.setLayout( new GridLayout() );
scrolledComposite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
Composite contentComposite = BaseWidgetUtils.createColumnContainer( scrolledComposite, 1, 1 );
scrolledComposite.setContent( contentComposite );
ExpandableComposite saslExpandableComposite = createExpandableSection( contentComposite, Messages
.getString( "AuthenticationParameterPage.SaslOptions" ), 1 ); //$NON-NLS-1$
saslComposite = BaseWidgetUtils.createColumnContainer( saslExpandableComposite, 2, 1 );
saslExpandableComposite.setClient( saslComposite );
createSaslControls();
ExpandableComposite krb5ExpandableComposite = createExpandableSection( contentComposite, Messages
.getString( "AuthenticationParameterPage.Krb5Options" ), 1 ); //$NON-NLS-1$
krb5Composite = BaseWidgetUtils.createColumnContainer( krb5ExpandableComposite, 1, 1 );
krb5ExpandableComposite.setClient( krb5Composite );
createKrb5Controls();
contentComposite.setSize( contentComposite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
}
protected ExpandableComposite createExpandableSection( Composite parent, String label, int nColumns )
{
ExpandableComposite excomposite = new ExpandableComposite( parent, SWT.NONE, ExpandableComposite.TWISTIE
| ExpandableComposite.CLIENT_INDENT );
excomposite.setText( label );
excomposite.setExpanded( false );
excomposite.setFont( JFaceResources.getFontRegistry().getBold( JFaceResources.DIALOG_FONT ) );
excomposite.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, false, nColumns, 1 ) );
excomposite.addExpansionListener( new ExpansionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void expansionStateChanged( ExpansionEvent event )
{
ExpandableComposite excomposite = ( ExpandableComposite ) event.getSource();
excomposite.getParent().setSize( excomposite.getParent().computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
}
} );
return excomposite;
}
private void createSaslControls()
{
BaseWidgetUtils.createLabel( saslComposite, Messages.getString( "AuthenticationParameterPage.SaslRealm" ), 1 ); //$NON-NLS-1$
String[] saslHistory = HistoryUtils.load( ConnectionUIPlugin.getDefault().getDialogSettings(),
ConnectionUIConstants.DIALOGSETTING_KEY_REALM_HISTORY );
saslRealmText = BaseWidgetUtils.createCombo( saslComposite, saslHistory, -1, 1 );
BaseWidgetUtils.createLabel( saslComposite, Messages.getString( "AuthenticationParameterPage.SaslQop" ), 1 ); //$NON-NLS-1$
String[] qops = new String[]
{
Messages.getString( "AuthenticationParameterPage.SaslQopAuth" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.SaslQopAuthInt" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.SaslQopAuthIntPriv" ) //$NON-NLS-1$
};
saslQopCombo = BaseWidgetUtils.createReadonlyCombo( saslComposite, qops, 0, 1 );
BaseWidgetUtils.createLabel( saslComposite, Messages
.getString( "AuthenticationParameterPage.SaslSecurityStrength" ), 1 ); //$NON-NLS-1$
String[] securityStrengths = new String[]
{
Messages.getString( "AuthenticationParameterPage.SaslSecurityStrengthHigh" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.SaslSecurityStrengthMedium" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.SaslSecurityStrengthLow" ) //$NON-NLS-1$
};
saslSecurityStrengthCombo = BaseWidgetUtils.createReadonlyCombo( saslComposite, securityStrengths, 0, 1 );
saslMutualAuthenticationButton = BaseWidgetUtils.createCheckbox( saslComposite, Messages
.getString( "AuthenticationParameterPage.SaslMutualAuthentication" ), 2 ); //$NON-NLS-1$
}
private void createKrb5Controls()
{
Group credentialProviderGroup = BaseWidgetUtils.createGroup( krb5Composite, Messages
.getString( "AuthenticationParameterPage.Krb5CredentialConf" ), 1 ); //$NON-NLS-1$
Composite credentialProviderComposite = BaseWidgetUtils.createColumnContainer( credentialProviderGroup, 1, 1 );
krb5CredentialConfigurationUseNativeButton = BaseWidgetUtils.createRadiobutton( credentialProviderComposite,
Messages.getString( "AuthenticationParameterPage.Krb5CredentialConfUseNative" ), 1 ); //$NON-NLS-1$
krb5CredentialConfigurationUseNativeButton.setToolTipText( Messages
.getString( "AuthenticationParameterPage.Krb5CredentialConfUseNativeTooltip" ) ); //$NON-NLS-1$
krb5CredentialConfigurationUseNativeButton.setSelection( true );
krb5CredentialConfigurationObtainTgtButton = BaseWidgetUtils.createRadiobutton( credentialProviderComposite,
Messages.getString( "AuthenticationParameterPage.Krb5CredentialConfObtainTgt" ), 1 ); //$NON-NLS-1$
krb5CredentialConfigurationObtainTgtButton.setToolTipText( Messages
.getString( "AuthenticationParameterPage.Krb5CredentialConfObtainTgtTooltip" ) ); //$NON-NLS-1$
Group configGroup = BaseWidgetUtils.createGroup( krb5Composite, Messages
.getString( "AuthenticationParameterPage.Krb5Config" ), 1 ); //$NON-NLS-1$
Composite configComposite = BaseWidgetUtils.createColumnContainer( configGroup, 3, 1 );
krb5ConfigDefaultButton = BaseWidgetUtils.createRadiobutton( configComposite, Messages
.getString( "AuthenticationParameterPage.Krb5ConfigDefault" ), 3 ); //$NON-NLS-1$
krb5ConfigDefaultButton.setSelection( true );
krb5ConfigFileButton = BaseWidgetUtils.createRadiobutton( configComposite, Messages
.getString( "AuthenticationParameterPage.Krb5ConfigFile" ), 1 ); //$NON-NLS-1$
krb5ConfigFileText = BaseWidgetUtils.createText( configComposite, StringUtils.EMPTY, 2 ); //$NON-NLS-1$
krb5ConfigManualButton = BaseWidgetUtils.createRadiobutton( configComposite, Messages
.getString( "AuthenticationParameterPage.Krb5ConfigManual" ), 1 ); //$NON-NLS-1$
BaseWidgetUtils.createLabel( configComposite, Messages.getString( "AuthenticationParameterPage.Krb5Realm" ), //$NON-NLS-1$
1 );
krb5ConfigManualRealmText = BaseWidgetUtils.createText( configComposite, StringUtils.EMPTY, 1 ); //$NON-NLS-1$
BaseWidgetUtils.createSpacer( configComposite, 1 );
BaseWidgetUtils.createLabel( configComposite,
Messages.getString( "AuthenticationParameterPage.Krb5KdcHost" ), 1 ); //$NON-NLS-1$
krb5ConfigManualHostText = BaseWidgetUtils.createText( configComposite, StringUtils.EMPTY, 1 ); //$NON-NLS-1$
BaseWidgetUtils.createSpacer( configComposite, 1 );
BaseWidgetUtils.createLabel( configComposite,
Messages.getString( "AuthenticationParameterPage.Krb5KdcPort" ), 1 ); //$NON-NLS-1$
krb5ConfigManualPortText = BaseWidgetUtils.createText( configComposite, "88", 1 ); //$NON-NLS-1$
krb5ConfigManualPortText.setTextLimit( 5 );
}
/**
* @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#validate()
*/
protected void validate()
{
// set enabled/disabled state of fields and buttons
if ( saslComposite != null )
{
for ( Control c : saslComposite.getChildren() )
{
c.setEnabled( isSaslEnabled() );
}
saslRealmText.setEnabled( isSaslRealmTextEnabled() );
}
// TODO: get setting from global preferences.
Preferences preferences = ConnectionCorePlugin.getDefault().getPluginPreferences();
boolean useKrb5SystemProperties = preferences
.getBoolean( ConnectionCoreConstants.PREFERENCE_USE_KRB5_SYSTEM_PROPERTIES );
if ( krb5Composite != null )
{
krb5CredentialConfigurationUseNativeButton.setEnabled( isGssapiEnabled() && !useKrb5SystemProperties );
krb5CredentialConfigurationObtainTgtButton.setEnabled( isGssapiEnabled() && !useKrb5SystemProperties );
krb5ConfigDefaultButton.setEnabled( isGssapiEnabled() && !useKrb5SystemProperties );
krb5ConfigFileButton.setEnabled( isGssapiEnabled() && !useKrb5SystemProperties );
krb5ConfigManualButton.setEnabled( isGssapiEnabled() && !useKrb5SystemProperties );
krb5ConfigFileText.setEnabled( isGssapiEnabled() && krb5ConfigFileButton.getSelection()
&& !useKrb5SystemProperties );
krb5ConfigManualRealmText.setEnabled( isGssapiEnabled() && krb5ConfigManualButton.getSelection()
&& !useKrb5SystemProperties );
krb5ConfigManualHostText.setEnabled( isGssapiEnabled() && krb5ConfigManualButton.getSelection()
&& !useKrb5SystemProperties );
krb5ConfigManualPortText.setEnabled( isGssapiEnabled() && krb5ConfigManualButton.getSelection()
&& !useKrb5SystemProperties );
}
bindPrincipalCombo.setEnabled( isPrincipalPasswordEnabled() );
bindPasswordText.setEnabled( isPrincipalPasswordEnabled() && isSaveBindPassword() );
saveBindPasswordButton.setEnabled( isPrincipalPasswordEnabled() );
checkPrincipalPasswordAuthButton
.setEnabled( ( isPrincipalPasswordEnabled() && isSaveBindPassword()
&& !bindPrincipalCombo.getText().equals( StringUtils.EMPTY )
&& !bindPasswordText.getText().equals( StringUtils.EMPTY ) ) || isGssapiEnabled() ); //$NON-NLS-1$ //$NON-NLS-2$
// validate input fields
message = null;
infoMessage = null;
errorMessage = null;
if ( isPrincipalPasswordEnabled() )
{
if ( isSaveBindPassword() && Strings.isEmpty( bindPasswordText.getText() ) ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterBindPassword" ); //$NON-NLS-1$
}
if ( Strings.isEmpty( bindPrincipalCombo.getText() ) && !isGssapiEnabled() ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterBindDNOrUser" ); //$NON-NLS-1$
}
}
if ( isSaslRealmTextEnabled() && Strings.isEmpty( saslRealmText.getText() ) ) //$NON-NLS-1$
{
infoMessage = Messages.getString( "AuthenticationParameterPage.PleaseEnterSaslRealm" ); //$NON-NLS-1$
}
if ( isGssapiEnabled() && krb5ConfigFileButton.getSelection()
&& Strings.isEmpty( krb5ConfigFileText.getText() ) ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterKrb5ConfigFile" ); //$NON-NLS-1$
}
if ( isGssapiEnabled() && krb5ConfigManualButton.getSelection() )
{
if ( Strings.isEmpty( krb5ConfigManualPortText.getText() ) ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterKrb5Port" ); //$NON-NLS-1$
}
if ( Strings.isEmpty( krb5ConfigManualHostText.getText() ) ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterKrb5Host" ); //$NON-NLS-1$
}
if ( Strings.isEmpty( krb5ConfigManualRealmText.getText() ) ) //$NON-NLS-1$
{
message = Messages.getString( "AuthenticationParameterPage.PleaseEnterKrb5Realm" ); //$NON-NLS-1$
}
}
}
/**
* Checks if is principal password enabled.
*
* @return true, if is principal password enabled
*/
private boolean isPrincipalPasswordEnabled()
{
return ( getAuthenticationMethod() == AuthenticationMethod.SIMPLE )
|| ( getAuthenticationMethod() == AuthenticationMethod.SASL_DIGEST_MD5 )
|| ( getAuthenticationMethod() == AuthenticationMethod.SASL_CRAM_MD5 )
|| ( getAuthenticationMethod() == AuthenticationMethod.SASL_GSSAPI
&& krb5CredentialConfigurationObtainTgtButton
.getSelection() );
}
private boolean isSaslRealmTextEnabled()
{
return getAuthenticationMethod() == AuthenticationMethod.SASL_DIGEST_MD5;
}
private boolean isSaslEnabled()
{
AuthenticationMethod authenticationMethod = getAuthenticationMethod();
return ( authenticationMethod == AuthenticationMethod.SASL_DIGEST_MD5 )
|| ( authenticationMethod == AuthenticationMethod.SASL_CRAM_MD5 )
|| ( authenticationMethod == AuthenticationMethod.SASL_GSSAPI );
}
private boolean isGssapiEnabled()
{
return getAuthenticationMethod() == AuthenticationMethod.SASL_GSSAPI;
}
/**
* @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#
* loadParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
*/
protected void loadParameters( ConnectionParameter parameter )
{
connectionParameter = parameter;
AuthenticationMethod authenticationMethod = parameter.getAuthMethod();
int index = authenticationMethod.getValue();
authenticationMethodCombo.select( index );
bindPrincipalCombo.setText( CommonUIUtils.getTextValue( parameter.getBindPrincipal() ) );
String bindPassword = null;
// Checking of the connection passwords keystore is enabled
if ( PasswordsKeyStoreManagerUtils.isPasswordsKeystoreEnabled() )
{
// Getting the password keystore manager
PasswordsKeyStoreManager passwordsKeyStoreManager = ConnectionCorePlugin.getDefault()
.getPasswordsKeyStoreManager();
// Checking if the keystore is loaded
if ( passwordsKeyStoreManager.isLoaded() )
{
bindPassword = passwordsKeyStoreManager.getConnectionPassword( parameter.getId() );
}
}
else
{
bindPassword = parameter.getBindPassword();
}
bindPasswordText.setText( CommonUIUtils.getTextValue( bindPassword ) );
// The Save Bind Password Button
saveBindPasswordButton.setSelection( bindPassword != null );
// The SASL realm
saslRealmText.setText( CommonUIUtils.getTextValue( parameter.getSaslRealm() ) );
// The SASL QOP combo
int qopIndex;
SaslQoP saslQop = parameter.getSaslQop();
switch ( saslQop )
{
case AUTH_INT:
qopIndex = 1;
break;
case AUTH_CONF:
qopIndex = 2;
break;
default:
qopIndex = 0;
break;
}
saslQopCombo.select( qopIndex );
// The Security Strength
int securityStrengthIndex;
SaslSecurityStrength securityStrength = parameter.getSaslSecurityStrength();
switch ( securityStrength )
{
case MEDIUM:
securityStrengthIndex = 1;
break;
case LOW:
securityStrengthIndex = 2;
break;
default:
securityStrengthIndex = 0;
break;
}
saslSecurityStrengthCombo.select( securityStrengthIndex );
// The Mutual Authentication Button
saslMutualAuthenticationButton.setSelection( parameter.isSaslMutualAuthentication() );
krb5CredentialConfigurationUseNativeButton
.setSelection( parameter.getKrb5CredentialConfiguration() == Krb5CredentialConfiguration.USE_NATIVE );
krb5CredentialConfigurationObtainTgtButton
.setSelection( parameter.getKrb5CredentialConfiguration() == Krb5CredentialConfiguration.OBTAIN_TGT );
krb5ConfigDefaultButton.setSelection( parameter.getKrb5Configuration() == Krb5Configuration.DEFAULT );
krb5ConfigFileButton.setSelection( parameter.getKrb5Configuration() == Krb5Configuration.FILE );
krb5ConfigManualButton.setSelection( parameter.getKrb5Configuration() == Krb5Configuration.MANUAL );
krb5ConfigFileText.setText( CommonUIUtils.getTextValue( parameter.getKrb5ConfigurationFile() ) ); //$NON-NLS-1$
krb5ConfigManualRealmText.setText( CommonUIUtils.getTextValue( parameter.getKrb5Realm() ) ); //$NON-NLS-1$
krb5ConfigManualHostText.setText( CommonUIUtils.getTextValue( parameter.getKrb5KdcHost() ) ); //$NON-NLS-1$
krb5ConfigManualPortText.setText( CommonUIUtils.getTextValue( parameter.getKrb5KdcPort() ) ); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @see org.apache.directory.studio.connection.ui.AbstractConnectionParameterPage#initListeners()
*/
protected void initListeners()
{
authenticationMethodCombo.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
bindPrincipalCombo.addModifyListener( event -> connectionPageModified() );
bindPasswordText.addModifyListener( event -> connectionPageModified() );
saveBindPasswordButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
if ( !saveBindPasswordButton.getSelection() )
{
// Reseting the previously saved password (if any)
bindPasswordText.setText( StringUtils.EMPTY ); //$NON-NLS-1$
}
connectionPageModified();
}
} );
checkPrincipalPasswordAuthButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
Connection connection = getTestConnection();
CheckBindRunnable runnable = new CheckBindRunnable( connection );
IStatus status = RunnableContextRunner.execute( runnable, runnableContext, true );
if ( status.isOK() )
{
MessageDialog.openInformation( Display.getDefault().getActiveShell(), Messages
.getString( "AuthenticationParameterPage.CheckAuthentication" ), //$NON-NLS-1$
Messages.getString( "AuthenticationParameterPage.AuthenticationSuccessfull" ) ); //$NON-NLS-1$
}
}
} );
saslRealmText.addModifyListener( event -> connectionPageModified() );
saslQopCombo.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
saslSecurityStrengthCombo.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
saslMutualAuthenticationButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5CredentialConfigurationUseNativeButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5CredentialConfigurationObtainTgtButton.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5ConfigDefaultButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5ConfigFileButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5ConfigFileText.addModifyListener( event -> connectionPageModified() );
krb5ConfigManualButton.addSelectionListener( new SelectionAdapter()
{
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected( SelectionEvent event )
{
connectionPageModified();
}
} );
krb5ConfigManualRealmText.addModifyListener( event -> connectionPageModified() );
krb5ConfigManualHostText.addModifyListener( event -> connectionPageModified() );
krb5ConfigManualPortText.addVerifyListener( event -> {
if ( !event.text.matches( "[0-9]*" ) ) //$NON-NLS-1$
{
event.doit = false;
}
} );
krb5ConfigManualPortText.addModifyListener( event -> connectionPageModified() );
}
/**
* @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#
* saveParameters(org.apache.directory.studio.connection.core.ConnectionParameter)
*/
public void saveParameters( ConnectionParameter parameter )
{
parameter.setAuthMethod( getAuthenticationMethod() );
parameter.setBindPrincipal( getBindPrincipal() );
// Checking of the connection passwords keystore is enabled
if ( PasswordsKeyStoreManagerUtils.isPasswordsKeystoreEnabled() )
{
// Getting the password keystore manager
PasswordsKeyStoreManager passwordsKeyStoreManager = ConnectionCorePlugin.getDefault()
.getPasswordsKeyStoreManager();
// Checking if the keystore is loaded
if ( passwordsKeyStoreManager.isLoaded() )
{
passwordsKeyStoreManager.storeConnectionPassword( parameter.getId(), getBindPassword() );
}
}
else
{
parameter.setBindPassword( getBindPassword() );
}
parameter.setSaslRealm( getSaslRealm() );
parameter.setSaslQop( getSaslQop() );
parameter.setSaslSecurityStrength( getSaslSecurityStrength() );
parameter.setSaslMutualAuthentication( saslMutualAuthenticationButton.getSelection() );
parameter.setKrb5CredentialConfiguration( getKrb5CredentialProvider() );
parameter.setKrb5Configuration( getKrb5Configuration() );
parameter.setKrb5ConfigurationFile( krb5ConfigFileText.getText() );
parameter.setKrb5Realm( krb5ConfigManualRealmText.getText() );
parameter.setKrb5KdcHost( krb5ConfigManualHostText.getText() );
parameter.setKrb5KdcPort( getKdcPort() );
}
/**
* @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#saveDialogSettings()
*/
public void saveDialogSettings()
{
IDialogSettings dialogSettings = ConnectionUIPlugin.getDefault().getDialogSettings();
HistoryUtils.save( dialogSettings, ConnectionUIConstants.DIALOGSETTING_KEY_PRINCIPAL_HISTORY,
bindPrincipalCombo.getText() );
if ( getAuthenticationMethod().equals( AuthenticationMethod.SASL_DIGEST_MD5 ) )
{
HistoryUtils.save( dialogSettings, ConnectionUIConstants.DIALOGSETTING_KEY_REALM_HISTORY,
saslRealmText.getText() );
}
}
/**
* @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#setFocus()
*/
public void setFocus()
{
bindPrincipalCombo.setFocus();
}
/**
* @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#areParametersModifed()
*/
public boolean areParametersModifed()
{
return isReconnectionRequired();
}
/**
* @see org.apache.directory.studio.connection.ui.ConnectionParameterPage#isReconnectionRequired()
*/
public boolean isReconnectionRequired()
{
return connectionParameter == null || connectionParameter.getAuthMethod() != getAuthenticationMethod()
|| !StringUtils.equals( connectionParameter.getBindPrincipal(), getBindPrincipal() )
|| !StringUtils.equals( connectionParameter.getBindPassword(), getBindPassword() )
|| !StringUtils.equals( connectionParameter.getSaslRealm(), getSaslRealm() )
|| connectionParameter.getSaslQop() != getSaslQop()
|| connectionParameter.getSaslSecurityStrength() != getSaslSecurityStrength()
|| connectionParameter.isSaslMutualAuthentication() != saslMutualAuthenticationButton.getSelection()
|| connectionParameter.getKrb5CredentialConfiguration() != getKrb5CredentialProvider()
|| connectionParameter.getKrb5Configuration() != getKrb5Configuration()
|| !StringUtils.equals( connectionParameter.getKrb5ConfigurationFile(), krb5ConfigFileText.getText() )
|| !StringUtils.equals( connectionParameter.getKrb5Realm(), krb5ConfigManualRealmText.getText() )
|| !StringUtils.equals( connectionParameter.getKrb5KdcHost(), krb5ConfigManualHostText.getText() )
|| connectionParameter.getKrb5KdcPort() != getKdcPort();
}
/**
* {@inheritDoc}
*/
public void mergeParametersToLdapURL( ConnectionParameter parameter, LdapUrl ldapUrl )
{
switch ( parameter.getAuthMethod() )
{
case SASL_CRAM_MD5:
ldapUrl.getExtensions().add( new Extension( false, X_AUTH_METHOD, X_AUTH_METHOD_CRAM_MD5 ) );
break;
case SASL_DIGEST_MD5:
ldapUrl.getExtensions().add( new Extension( false, X_AUTH_METHOD, X_AUTH_METHOD_DIGEST_MD5 ) );
break;
case SASL_GSSAPI:
ldapUrl.getExtensions().add( new Extension( false, X_AUTH_METHOD, X_AUTH_METHOD_GSSAPI ) );
break;
case SIMPLE:
if ( StringUtils.isEmpty( parameter.getBindPrincipal() ) )
{
// default if bind user is present
ldapUrl.getExtensions().add( new Extension( false, X_AUTH_METHOD, X_AUTH_METHOD_SIMPLE ) );
}
break;
case NONE:
if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
{
// default if bind user is absent
ldapUrl.getExtensions().add( new Extension( false, X_AUTH_METHOD, X_AUTH_METHOD_ANONYMOUS ) );
}
break;
}
if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
{
ldapUrl.getExtensions().add( new Extension( false, X_BIND_USER, parameter.getBindPrincipal() ) );
}
if ( StringUtils.isNotEmpty( parameter.getBindPassword() ) )
{
ldapUrl.getExtensions().add( new Extension( false, X_BIND_PASSWORD, parameter.getBindPassword() ) );
}
switch ( parameter.getAuthMethod() )
{
case SASL_CRAM_MD5:
case SASL_DIGEST_MD5:
case SASL_GSSAPI:
if ( StringUtils.isNotEmpty( parameter.getSaslRealm() ) )
{
ldapUrl.getExtensions().add( new Extension( false, X_SASL_REALM, parameter.getSaslRealm() ) );
}
switch ( parameter.getSaslQop() )
{
case AUTH:
// default
break;
case AUTH_INT:
ldapUrl.getExtensions().add( new Extension( false, X_SASL_QOP, X_SASL_QOP_AUTH_INT ) );
break;
case AUTH_CONF:
ldapUrl.getExtensions().add( new Extension( false, X_SASL_QOP, X_SASL_QOP_AUTH_INT_PRIV ) );
break;
}
switch ( parameter.getSaslSecurityStrength() )
{
case HIGH:
// default
break;
case MEDIUM:
ldapUrl.getExtensions().add(
new Extension( false, X_SASL_SEC_STRENGTH, X_SASL_SEC_STRENGTH_MEDIUM ) );
break;
case LOW:
ldapUrl.getExtensions().add(
new Extension( false, X_SASL_SEC_STRENGTH, X_SASL_SEC_STRENGTH_LOW ) );
break;
}
if ( !parameter.isSaslMutualAuthentication() )
{
ldapUrl.getExtensions().add( new Extension( false, X_SASL_NO_MUTUAL_AUTH, null ) );
}
break;
default:
break;
}
if ( parameter.getAuthMethod() == AuthenticationMethod.SASL_GSSAPI )
{
switch ( parameter.getKrb5CredentialConfiguration() )
{
case USE_NATIVE:
// default
break;
case OBTAIN_TGT:
ldapUrl.getExtensions().add(
new Extension( false, X_KRB5_CREDENTIALS_CONF, X_KRB5_CREDENTIALS_CONF_OBTAIN_TGT ) );
break;
}
switch ( parameter.getKrb5Configuration() )
{
case DEFAULT:
// default
break;
case FILE:
ldapUrl.getExtensions().add( new Extension( false, X_KRB5_CONFIG, X_KRB5_CONFIG_FILE ) );
ldapUrl.getExtensions().add(
new Extension( false, X_KRB5_CONFIG_FILE_FILE, parameter.getKrb5ConfigurationFile() ) );
break;
case MANUAL:
ldapUrl.getExtensions().add( new Extension( false, X_KRB5_CONFIG, X_KRB5_CONFIG_MANUAL ) );
ldapUrl.getExtensions().add(
new Extension( false, X_KRB5_CONFIG_MANUAL_REALM, parameter.getKrb5Realm() ) );
ldapUrl.getExtensions().add(
new Extension( false, X_KRB5_CONFIG_MANUAL_KDC_HOST, parameter.getKrb5KdcHost() ) );
ldapUrl.getExtensions().add(
new Extension( false, X_KRB5_CONFIG_MANUAL_KDC_PORT,
Integer.toString( parameter.getKrb5KdcPort() ) ) ); //$NON-NLS-1$
break;
}
}
}
/**
* {@inheritDoc}
*/
public void mergeLdapUrlToParameters( LdapUrl ldapUrl, ConnectionParameter parameter )
{
// bind user and password, none if empty or absent
String principal = ldapUrl.getExtensionValue( X_BIND_USER );
if ( principal == null )
{
principal = StringUtils.EMPTY;
}
parameter.setBindPrincipal( principal );
String password = ldapUrl.getExtensionValue( X_BIND_PASSWORD );
parameter.setBindPassword( password );
// auth method, simple if unknown or absent and X-BIND-USER is present, else anonymous
String authMethod = ldapUrl.getExtensionValue( X_AUTH_METHOD );
if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_ANONYMOUS.equalsIgnoreCase( authMethod ) )
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.NONE );
}
else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_SIMPLE.equalsIgnoreCase( authMethod ) )
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SIMPLE );
}
else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_DIGEST_MD5.equalsIgnoreCase( authMethod ) )
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SASL_DIGEST_MD5 );
}
else if ( StringUtils.isNotEmpty( authMethod ) && X_AUTH_METHOD_CRAM_MD5.equalsIgnoreCase( authMethod ) )
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SASL_CRAM_MD5 );
}
else if ( StringUtils.isNotEmpty( parameter.getBindPrincipal() ) )
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.SIMPLE );
}
else
{
parameter.setAuthMethod( ConnectionParameter.AuthenticationMethod.NONE );
}
// SASL realm, none if empty or absent
String saslRealm = ldapUrl.getExtensionValue( X_SASL_REALM );
if ( StringUtils.isNotEmpty( saslRealm ) )
{
parameter.setSaslRealm( saslRealm );
}
// SASL QOP, default to AUTH
String saslQop = ldapUrl.getExtensionValue( X_SASL_QOP );
if ( StringUtils.isNotEmpty( saslQop ) && X_SASL_QOP_AUTH_INT.equalsIgnoreCase( saslQop ) )
{
parameter.setSaslQop( SaslQoP.AUTH_INT );
}
else if ( StringUtils.isNotEmpty( saslQop ) && X_SASL_QOP_AUTH_INT_PRIV.equalsIgnoreCase( saslQop ) )
{
parameter.setSaslQop( SaslQoP.AUTH_CONF );
}
else
{
parameter.setSaslQop( SaslQoP.AUTH );
}
// SASL security strength, default to HIGH
String saslSecStrength = ldapUrl.getExtensionValue( X_SASL_SEC_STRENGTH );
if ( StringUtils.isNotEmpty( saslSecStrength )
&& X_SASL_SEC_STRENGTH_MEDIUM.equalsIgnoreCase( saslSecStrength ) )
{
parameter.setSaslSecurityStrength( SaslSecurityStrength.MEDIUM );
}
else if ( StringUtils.isNotEmpty( saslSecStrength )
&& X_SASL_SEC_STRENGTH_LOW.equalsIgnoreCase( saslSecStrength ) )
{
parameter.setSaslSecurityStrength( SaslSecurityStrength.LOW );
}
else
{
parameter.setSaslSecurityStrength( SaslSecurityStrength.HIGH );
}
// SASL mutual authentication, default to true
Extension saslNoMutualAuth = ldapUrl.getExtension( X_SASL_NO_MUTUAL_AUTH );
parameter.setSaslMutualAuthentication( saslNoMutualAuth == null );
// KRB5 credentials
String krb5CredentialsConf = ldapUrl.getExtensionValue( X_KRB5_CREDENTIALS_CONF );
if ( StringUtils.isNotEmpty( krb5CredentialsConf )
&& X_KRB5_CREDENTIALS_CONF_OBTAIN_TGT.equalsIgnoreCase( krb5CredentialsConf ) )
{
parameter.setKrb5CredentialConfiguration( Krb5CredentialConfiguration.OBTAIN_TGT );
}
else
{
parameter.setKrb5CredentialConfiguration( Krb5CredentialConfiguration.USE_NATIVE );
}
// KRB5 configuration
String krb5Config = ldapUrl.getExtensionValue( X_KRB5_CONFIG );
if ( StringUtils.isNotEmpty( krb5Config ) && X_KRB5_CONFIG_FILE.equalsIgnoreCase( krb5Config ) )
{
parameter.setKrb5Configuration( Krb5Configuration.FILE );
}
else if ( StringUtils.isNotEmpty( krb5Config ) && X_KRB5_CONFIG_MANUAL.equalsIgnoreCase( krb5Config ) )
{
parameter.setKrb5Configuration( Krb5Configuration.MANUAL );
}
else
{
parameter.setKrb5Configuration( Krb5Configuration.DEFAULT );
}
parameter.setKrb5ConfigurationFile( ldapUrl.getExtensionValue( X_KRB5_CONFIG_FILE_FILE ) );
parameter.setKrb5Realm( ldapUrl.getExtensionValue( X_KRB5_CONFIG_MANUAL_REALM ) );
parameter.setKrb5KdcHost( ldapUrl.getExtensionValue( X_KRB5_CONFIG_MANUAL_KDC_HOST ) );
String kdcPort = ldapUrl.getExtensionValue( X_KRB5_CONFIG_MANUAL_KDC_PORT );
try
{
parameter.setKrb5KdcPort( Integer.valueOf( kdcPort ) );
}
catch ( NumberFormatException e )
{
parameter.setKrb5KdcPort( 88 );
}
}
}