/* * 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.apacheds.configuration.editor; import java.util.ArrayList; import java.util.List; import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException; import org.apache.directory.api.ldap.model.name.Dn; import org.apache.directory.server.config.beans.ChangePasswordServerBean; import org.apache.directory.server.config.beans.DirectoryServiceBean; import org.apache.directory.server.config.beans.InterceptorBean; import org.apache.directory.server.config.beans.KdcServerBean; import org.apache.directory.server.config.beans.TransportBean; import org.apache.directory.shared.kerberos.codec.types.EncryptionType; import org.apache.directory.studio.common.ui.CommonUIUtils; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; /** * This class represents the General Page of the Server Configuration Editor. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class KerberosServerPage extends ServerConfigurationEditorPage { /** The Page ID*/ public static final String ID = KerberosServerPage.class.getName(); //$NON-NLS-1$ /** The Page Title */ private static final String TITLE = Messages.getString( "KerberosServerPage.KerberosServer" ); //$NON-NLS-1$ /** The encryption types supported by ApacheDS */ private static final EncryptionType[] SUPPORTED_ENCRYPTION_TYPES = new EncryptionType[] { EncryptionType.DES_CBC_MD5, EncryptionType.DES3_CBC_SHA1_KD, EncryptionType.AES128_CTS_HMAC_SHA1_96, EncryptionType.AES256_CTS_HMAC_SHA1_96, EncryptionType.RC4_HMAC }; // UI Controls // The Kerberos transport private Button enableKerberosCheckbox; private Text kerberosPortText; private Text kerberosAddressText; // The ChangePassword transport private Button enableChangePasswordCheckbox; private Text changePasswordPortText; private Text changePasswordAddressText; // The basic Kerberos settings private Text primaryKdcRealmText; private Text kdcSearchBaseDnText; private CheckboxTableViewer encryptionTypesTableViewer; // The kerberos Tickets settings private Button verifyBodyChecksumCheckbox; private Button allowEmptyAddressesCheckbox; private Button allowForwardableAddressesCheckbox; private Button requirePreAuthByEncryptedTimestampCheckbox; private Button allowPostdatedTicketsCheckbox; private Button allowRenewableTicketsCheckbox; private Button allowProxiableTicketsCheckbox; private Text maximumRenewableLifetimeText; private Text maximumTicketLifetimeText; private Text allowableClockSkewText; // UI Controls Listeners /** * The Kerberos checkbox listener */ private SelectionAdapter enableKerberosCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { boolean enabled = enableKerberosCheckbox.getSelection(); enableKerberosServer( getDirectoryServiceBean(), enabled ); setEnabled( kerberosPortText, enabled ); setEnabled( kerberosAddressText, enabled ); } }; /** * The Kerberos port listener */ private ModifyListener kerberosPortTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { setKerberosPort( getDirectoryServiceBean(), kerberosPortText.getText() ); } }; /** * The Kerberos address modify listener */ private ModifyListener kerberosAddressTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { setKerberosAddress( getDirectoryServiceBean(), kerberosAddressText.getText() ); } }; /** * The ChangePassword checkbox listener */ private SelectionAdapter enableChangePasswordCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { boolean enabled = enableChangePasswordCheckbox.getSelection(); getChangePasswordServerBean().setEnabled( enabled ); setEnabled( changePasswordPortText, enabled ); setEnabled( changePasswordAddressText, enabled ); } }; /** * The ChangePassword port listener */ private ModifyListener changePasswordPortTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { setChangePasswordPort( getDirectoryServiceBean(), changePasswordPortText.getText() ); } }; /** * The ChangePassword address modify listener */ private ModifyListener changePasswordAddressTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { setChangePasswordAddress( getDirectoryServiceBean(), changePasswordAddressText.getText() ); } }; private ModifyListener primaryKdcRealmTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getKdcServerBean().setKrbPrimaryRealm( primaryKdcRealmText.getText() ); } }; private ModifyListener kdcSearchBaseDnTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { String searchBaseDnValue = kdcSearchBaseDnText.getText(); try { Dn searchBaseDn = new Dn( searchBaseDnValue ); getKdcServerBean().setSearchBaseDn( searchBaseDn ); } catch ( LdapInvalidDnException e1 ) { // Stay silent } } }; private ICheckStateListener encryptionTypesTableViewerListener = new ICheckStateListener() { public void checkStateChanged( CheckStateChangedEvent event ) { // Checking if the last encryption type is being unchecked if ( ( getKdcServerBean().getKrbEncryptionTypes().size() == 1 ) && ( event.getChecked() == false ) ) { // Displaying an error to the user CommonUIUtils.openErrorDialog( Messages .getString( "KerberosServerPage.AtLeastOneEncryptionTypeMustBeSelected" ) ); //$NON-NLS-1$ // Reverting the current checked state encryptionTypesTableViewer.setChecked( event.getElement(), !event.getChecked() ); // Exiting return; } // Setting the editor as dirty setEditorDirty(); // Clearing previous encryption types getKdcServerBean().getKrbEncryptionTypes().clear(); // Getting all selected encryption types Object[] selectedEncryptionTypeObjects = encryptionTypesTableViewer.getCheckedElements(); // Adding each encryption type for ( Object encryptionTypeObject : selectedEncryptionTypeObjects ) { if ( encryptionTypeObject instanceof EncryptionType ) { EncryptionType encryptionType = ( EncryptionType ) encryptionTypeObject; getKdcServerBean().addKrbEncryptionTypes( encryptionType.getName() ); } } } }; private SelectionAdapter verifyBodyChecksumCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbBodyChecksumVerified( verifyBodyChecksumCheckbox.getSelection() ); } }; private SelectionAdapter allowEmptyAddressesCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbEmptyAddressesAllowed( allowEmptyAddressesCheckbox.getSelection() ); } }; private SelectionAdapter allowForwardableAddressesCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbForwardableAllowed( allowForwardableAddressesCheckbox.getSelection() ); } }; private SelectionAdapter requirePreAuthByEncryptedTimestampCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbPaEncTimestampRequired( requirePreAuthByEncryptedTimestampCheckbox.getSelection() ); } }; private SelectionAdapter allowPostdatedTicketsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbPostdatedAllowed( allowPostdatedTicketsCheckbox.getSelection() ); } }; /** * The Allow Renewable Tickets listener */ private SelectionAdapter allowRenewableTicketsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbRenewableAllowed( allowRenewableTicketsCheckbox.getSelection() ); } }; /** * The Allow Proxiable Tickets listener */ private SelectionAdapter allowProxiableTicketsCheckboxListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getKdcServerBean().setKrbProxiableAllowed( allowProxiableTicketsCheckbox.getSelection() ); } }; private ModifyListener maximumRenewableLifetimeTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getKdcServerBean() .setKrbMaximumRenewableLifetime( Long.parseLong( maximumRenewableLifetimeText.getText() ) ); } }; private ModifyListener maximumTicketLifetimeTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getKdcServerBean().setKrbMaximumTicketLifetime( Long.parseLong( maximumTicketLifetimeText.getText() ) ); } }; private ModifyListener allowableClockSkewTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getKdcServerBean().setKrbAllowableClockSkew( Long.parseLong( allowableClockSkewText.getText() ) ); } }; /** * Creates a new instance of GeneralPage. * * @param editor * the associated editor */ public KerberosServerPage( ServerConfigurationEditor editor ) { super( editor, ID, TITLE ); } /** * {@inheritDoc} */ protected void createFormContent( Composite parent, FormToolkit toolkit ) { TableWrapLayout twl = new TableWrapLayout(); twl.numColumns = 2; parent.setLayout( twl ); // Left Composite Composite leftComposite = toolkit.createComposite( parent ); leftComposite.setLayout( new GridLayout() ); TableWrapData leftCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); leftCompositeTableWrapData.grabHorizontal = true; leftComposite.setLayoutData( leftCompositeTableWrapData ); // Right Composite Composite rightComposite = toolkit.createComposite( parent ); rightComposite.setLayout( new GridLayout() ); TableWrapData rightCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); rightCompositeTableWrapData.grabHorizontal = true; rightComposite.setLayoutData( rightCompositeTableWrapData ); // Creating the sections createKerberosServerSection( toolkit, leftComposite ); createKerberosSettingsSection( toolkit, leftComposite ); createTicketSettingsSection( toolkit, rightComposite ); // Refreshing the UI refreshUI(); } /** * Creates the Kerberos Server section. * * @param toolkit the toolkit to use * @param parent the parent composite */ private void createKerberosServerSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = toolkit.createSection( parent, Section.TITLE_BAR ); section.setText( Messages.getString( "KerberosServerPage.KerberosServer" ) ); //$NON-NLS-1$ section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite composite = toolkit.createComposite( section ); toolkit.paintBordersFor( composite ); GridLayout gridLayout = new GridLayout( 4, false ); gridLayout.marginHeight = gridLayout.marginWidth = 0; composite.setLayout( gridLayout ); section.setClient( composite ); // Enable Kerberos Server Checkbox enableKerberosCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.EnableKerberosServer" ), SWT.CHECK ); //$NON-NLS-1$ enableKerberosCheckbox .setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, gridLayout.numColumns, 1 ) ); // Kerberos Server Port Text toolkit.createLabel( composite, TABULATION ); toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.Port" ) ); //$NON-NLS-1$ kerberosPortText = createPortText( toolkit, composite ); createDefaultValueLabel( toolkit, composite, "60088" ); //$NON-NLS-1$ // Kerberos Server Address Text toolkit.createLabel( composite, TABULATION ); toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.Address" ) ); //$NON-NLS-1$ kerberosAddressText = createAddressText( toolkit, composite ); createDefaultValueLabel( toolkit, composite, DEFAULT_ADDRESS ); //$NON-NLS-1$ // Enable Change Password Server Checkbox enableChangePasswordCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.EnableKerberosChangePassword" ), //$NON-NLS-1$ SWT.CHECK ); enableChangePasswordCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, gridLayout.numColumns, 1 ) ); // Change Password Server Port Text toolkit.createLabel( composite, TABULATION ); toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.Port" ) ); //$NON-NLS-1$ changePasswordPortText = createPortText( toolkit, composite ); createDefaultValueLabel( toolkit, composite, "60464" ); //$NON-NLS-1$ // Change Password Server Address Text toolkit.createLabel( composite, TABULATION ); toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.Address" ) ); //$NON-NLS-1$ changePasswordAddressText = createAddressText( toolkit, composite ); createDefaultValueLabel( toolkit, composite, DEFAULT_ADDRESS ); //$NON-NLS-1$ } /** * Creates the Kerberos Settings section * * @param toolkit the toolkit to use * @param parent the parent composite */ private void createKerberosSettingsSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = toolkit.createSection( parent, Section.TITLE_BAR ); section.setText( Messages.getString( "KerberosServerPage.KerberosSettings" ) ); //$NON-NLS-1$ section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite composite = toolkit.createComposite( section ); toolkit.paintBordersFor( composite ); GridLayout glayout = new GridLayout( 2, false ); composite.setLayout( glayout ); section.setClient( composite ); // SASL Principal Text toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.PrimaryKdcRealm" ) ); //$NON-NLS-1$ primaryKdcRealmText = toolkit.createText( composite, "" ); //$NON-NLS-1$ setGridDataWithDefaultWidth( primaryKdcRealmText, new GridData( SWT.FILL, SWT.NONE, true, false ) ); Label defaultSaslPrincipalLabel = createDefaultValueLabel( toolkit, composite, "EXAMPLE.COM" ); //$NON-NLS-1$ defaultSaslPrincipalLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); // Search Base Dn Text toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.SearchBaseDn" ) ); //$NON-NLS-1$ kdcSearchBaseDnText = toolkit.createText( composite, "" ); //$NON-NLS-1$ setGridDataWithDefaultWidth( kdcSearchBaseDnText, new GridData( SWT.FILL, SWT.NONE, true, false ) ); Label defaultSaslSearchBaseDnLabel = createDefaultValueLabel( toolkit, composite, "ou=users,dc=example,dc=com" ); //$NON-NLS-1$ defaultSaslSearchBaseDnLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) ); // Encryption Types Table Viewer Label encryptionTypesLabel = toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.EncryptionTypes" ) ); //$NON-NLS-1$ encryptionTypesLabel.setLayoutData( new GridData( SWT.BEGINNING, SWT.TOP, false, false ) ); encryptionTypesTableViewer = new CheckboxTableViewer( new Table( composite, SWT.BORDER | SWT.CHECK ) ); encryptionTypesTableViewer.setContentProvider( new ArrayContentProvider() ); encryptionTypesTableViewer.setLabelProvider( new LabelProvider() { public String getText( Object element ) { if ( element instanceof EncryptionType ) { EncryptionType encryptionType = ( EncryptionType ) element; return encryptionType.getName().toUpperCase(); } return super.getText( element ); } } ); encryptionTypesTableViewer.setInput( SUPPORTED_ENCRYPTION_TYPES ); GridData encryptionTypesTableViewerGridData = new GridData( SWT.FILL, SWT.NONE, true, false ); encryptionTypesTableViewerGridData.heightHint = 60; encryptionTypesTableViewer.getControl().setLayoutData( encryptionTypesTableViewerGridData ); } /** * Creates the Tickets Settings section * * @param toolkit the toolkit to use * @param parent the parent composite */ private void createTicketSettingsSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = toolkit.createSection( parent, Section.TITLE_BAR ); section.setText( Messages.getString( "KerberosServerPage.TicketSettings" ) ); //$NON-NLS-1$ section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); Composite composite = toolkit.createComposite( section ); toolkit.paintBordersFor( composite ); GridLayout layout = new GridLayout( 2, false ); composite.setLayout( layout ); section.setClient( composite ); // Verify Body Checksum Checkbox verifyBodyChecksumCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.VerifyBodyChecksum" ), SWT.CHECK ); //$NON-NLS-1$ verifyBodyChecksumCheckbox .setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Allow Empty Addresse Checkbox allowEmptyAddressesCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.AllowEmptyAddresses" ), SWT.CHECK ); //$NON-NLS-1$ allowEmptyAddressesCheckbox .setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Allow Forwardable Addresses Checkbox allowForwardableAddressesCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.AllowForwadableAddresses" ), //$NON-NLS-1$ SWT.CHECK ); allowForwardableAddressesCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Require Pre-Authentication By Encrypted Timestamp Checkbox requirePreAuthByEncryptedTimestampCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.RequirePreAuthentication" ), SWT.CHECK ); //$NON-NLS-1$ requirePreAuthByEncryptedTimestampCheckbox .setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Allow Postdated Tickets Checkbox allowPostdatedTicketsCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.AllowPostdatedTickets" ), SWT.CHECK ); //$NON-NLS-1$ allowPostdatedTicketsCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Allow Renewable Tickets Checkbox allowRenewableTicketsCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.AllowRenewableTickets" ), SWT.CHECK ); //$NON-NLS-1$ allowRenewableTicketsCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Allow Proxiable Tickets Checkbox allowProxiableTicketsCheckbox = toolkit.createButton( composite, Messages.getString( "KerberosServerPage.AllowProxiableTickets" ), SWT.CHECK ); //$NON-NLS-1$ allowProxiableTicketsCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, layout.numColumns, 1 ) ); // Max Renewable Lifetime Text toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.MaxRenewableLifetime" ) ); //$NON-NLS-1$ maximumRenewableLifetimeText = BaseWidgetUtils.createIntegerText( toolkit, composite ); setGridDataWithDefaultWidth( maximumRenewableLifetimeText, new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Max Ticket Lifetime Text toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.MaxTicketLifetime" ) ); //$NON-NLS-1$ maximumTicketLifetimeText = BaseWidgetUtils.createIntegerText( toolkit, composite ); setGridDataWithDefaultWidth( maximumTicketLifetimeText, new GridData( SWT.FILL, SWT.NONE, true, false ) ); // Allowable Clock Skew Text toolkit.createLabel( composite, Messages.getString( "KerberosServerPage.AllowableClockSkew" ) ); //$NON-NLS-1$ allowableClockSkewText = BaseWidgetUtils.createIntegerText( toolkit, composite ); setGridDataWithDefaultWidth( allowableClockSkewText, new GridData( SWT.FILL, SWT.NONE, true, false ) ); } /** * {@inheritDoc} */ protected void refreshUI() { if ( isInitialized() ) { removeListeners(); // Kerberos Server KdcServerBean kdcServerBean = getKdcServerBean(); setSelection( enableKerberosCheckbox, kdcServerBean.isEnabled() ); setEnabled( kerberosPortText, enableKerberosCheckbox.getSelection() ); setEnabled( kerberosAddressText, enableKerberosCheckbox.getSelection() ); setText( kerberosPortText, Integer.toString( kdcServerBean.getTransports()[0].getSystemPort() ) ); setText( kerberosAddressText, kdcServerBean.getTransports()[0].getTransportAddress() ); // Change Password Checkbox ChangePasswordServerBean changePasswordServerBean = getChangePasswordServerBean(); setSelection( enableChangePasswordCheckbox, changePasswordServerBean.isEnabled() ); setEnabled( changePasswordPortText, enableChangePasswordCheckbox.getSelection() ); setEnabled( changePasswordAddressText, enableChangePasswordCheckbox.getSelection() ); setText( changePasswordPortText, Integer.toString( changePasswordServerBean.getTransports()[0].getSystemPort() ) ); setText( changePasswordAddressText, changePasswordServerBean.getTransports()[0].getTransportAddress() ); // Kerberos Settings setText( primaryKdcRealmText, kdcServerBean.getKrbPrimaryRealm() ); setText( kdcSearchBaseDnText, kdcServerBean.getSearchBaseDn().toString() ); // Encryption Types List<String> encryptionTypesNames = kdcServerBean.getKrbEncryptionTypes(); List<EncryptionType> encryptionTypes = new ArrayList<EncryptionType>(); for ( String encryptionTypesName : encryptionTypesNames ) { EncryptionType encryptionType = EncryptionType.getByName( encryptionTypesName ); if ( !EncryptionType.UNKNOWN.equals( encryptionType ) ) { encryptionTypes.add( encryptionType ); } } encryptionTypesTableViewer.setCheckedElements( encryptionTypes.toArray() ); // Ticket Settings setSelection( verifyBodyChecksumCheckbox, kdcServerBean.isKrbBodyChecksumVerified() ); setSelection( allowEmptyAddressesCheckbox, kdcServerBean.isKrbEmptyAddressesAllowed() ); setSelection( allowForwardableAddressesCheckbox, kdcServerBean.isKrbForwardableAllowed() ); setSelection( requirePreAuthByEncryptedTimestampCheckbox, kdcServerBean.isKrbPaEncTimestampRequired() ); setSelection( allowPostdatedTicketsCheckbox, kdcServerBean.isKrbPostdatedAllowed() ); setSelection( allowRenewableTicketsCheckbox, kdcServerBean.isKrbRenewableAllowed() ); setSelection( allowProxiableTicketsCheckbox, kdcServerBean.isKrbProxiableAllowed() ); setText( maximumRenewableLifetimeText, Long.toString( kdcServerBean.getKrbMaximumRenewableLifetime() ) ); setText( maximumTicketLifetimeText, Long.toString( kdcServerBean.getKrbMaximumTicketLifetime() ) ); setText( allowableClockSkewText, Long.toString( kdcServerBean.getKrbAllowableClockSkew() ) ); addListeners(); } } /** * Adds listeners to UI Controls. */ private void addListeners() { // Enable Kerberos Server Checkbox addDirtyListener( enableKerberosCheckbox ); addSelectionListener( enableKerberosCheckbox, enableKerberosCheckboxListener ); // Kerberos Server Port Text addDirtyListener( kerberosPortText ); addModifyListener( kerberosPortText, kerberosPortTextListener ); // Kerberos Server Address Text addDirtyListener( kerberosAddressText ); addModifyListener( kerberosAddressText, kerberosAddressTextListener ); // Enable Change Password Server Checkbox addDirtyListener( enableChangePasswordCheckbox ); addSelectionListener( enableChangePasswordCheckbox, enableChangePasswordCheckboxListener ); // Change Password Server Port Text addDirtyListener( changePasswordPortText ); addModifyListener( changePasswordPortText, changePasswordPortTextListener ); // Change Password Server Address Text addDirtyListener( changePasswordAddressText ); addModifyListener( changePasswordAddressText, changePasswordAddressTextListener ); // Primary KDC Text addDirtyListener( primaryKdcRealmText ); addModifyListener( primaryKdcRealmText, primaryKdcRealmTextListener ); // KDC Search Base Dn Text addDirtyListener( kdcSearchBaseDnText ); addModifyListener( kdcSearchBaseDnText, kdcSearchBaseDnTextListener ); // Encryption Types Table Viewer encryptionTypesTableViewer.addCheckStateListener( encryptionTypesTableViewerListener ); // Verify Body Checksum Checkbox addDirtyListener( verifyBodyChecksumCheckbox ); addSelectionListener( verifyBodyChecksumCheckbox, verifyBodyChecksumCheckboxListener ); // Allow Empty Addresses Checkbox addDirtyListener( allowEmptyAddressesCheckbox ); addSelectionListener( allowEmptyAddressesCheckbox, allowEmptyAddressesCheckboxListener ); // Allow Forwardable Addresses Checkbox addDirtyListener( allowForwardableAddressesCheckbox ); addSelectionListener( allowForwardableAddressesCheckbox, allowForwardableAddressesCheckboxListener ); // Require Pre-Authentication By Encrypted Timestamp Checkbox addDirtyListener( requirePreAuthByEncryptedTimestampCheckbox ); addSelectionListener( requirePreAuthByEncryptedTimestampCheckbox, requirePreAuthByEncryptedTimestampCheckboxListener ); // Allow Postdated Tickets Checkbox addDirtyListener( allowPostdatedTicketsCheckbox ); addSelectionListener( allowPostdatedTicketsCheckbox, allowPostdatedTicketsCheckboxListener ); // Allow Renewable Tickets Checkbox addDirtyListener( allowRenewableTicketsCheckbox ); addSelectionListener( allowRenewableTicketsCheckbox, allowRenewableTicketsCheckboxListener ); // Allow Proxiable Tickets Checkbox addDirtyListener( allowProxiableTicketsCheckbox ); addSelectionListener( allowProxiableTicketsCheckbox, allowProxiableTicketsCheckboxListener ); // Maximum Renewable Lifetime Text addDirtyListener( maximumRenewableLifetimeText ); addModifyListener( maximumRenewableLifetimeText, maximumRenewableLifetimeTextListener ); // Maximum Ticket Lifetime Text addDirtyListener( maximumTicketLifetimeText ); addModifyListener( maximumTicketLifetimeText, maximumTicketLifetimeTextListener ); // Allowable Clock Skew Text addDirtyListener( allowableClockSkewText ); addModifyListener( allowableClockSkewText, allowableClockSkewTextListener ); } /** * Removes listeners to UI Controls. */ private void removeListeners() { // Enable Kerberos Server Checkbox removeDirtyListener( enableKerberosCheckbox ); removeSelectionListener( enableKerberosCheckbox, enableKerberosCheckboxListener ); // Kerberos Server Port Text removeDirtyListener( kerberosPortText ); removeModifyListener( kerberosPortText, kerberosPortTextListener ); // Kerberos Server Address Text removeDirtyListener( kerberosAddressText ); removeModifyListener( kerberosAddressText, kerberosAddressTextListener ); // Enable Change Password Server Checkbox removeDirtyListener( enableChangePasswordCheckbox ); removeSelectionListener( enableChangePasswordCheckbox, enableChangePasswordCheckboxListener ); // Change Password Server Port Text removeDirtyListener( changePasswordPortText ); removeModifyListener( changePasswordPortText, changePasswordPortTextListener ); // Change Password Server Address Text removeDirtyListener( changePasswordAddressText ); removeModifyListener( changePasswordAddressText, changePasswordAddressTextListener ); // Primary KDC Text removeDirtyListener( primaryKdcRealmText ); removeModifyListener( primaryKdcRealmText, primaryKdcRealmTextListener ); // KDC Search Base Dn Text removeDirtyListener( kdcSearchBaseDnText ); removeModifyListener( kdcSearchBaseDnText, kdcSearchBaseDnTextListener ); // Encryption Types Table Viewer encryptionTypesTableViewer.removeCheckStateListener( encryptionTypesTableViewerListener ); // Verify Body Checksum Checkbox removeDirtyListener( verifyBodyChecksumCheckbox ); removeSelectionListener( verifyBodyChecksumCheckbox, verifyBodyChecksumCheckboxListener ); // Allow Empty Addresses Checkbox removeDirtyListener( allowEmptyAddressesCheckbox ); removeSelectionListener( allowEmptyAddressesCheckbox, allowEmptyAddressesCheckboxListener ); // Allow Forwardable Addresses Checkbox removeDirtyListener( allowForwardableAddressesCheckbox ); removeSelectionListener( allowForwardableAddressesCheckbox, allowForwardableAddressesCheckboxListener ); // Require Pre-Authentication By Encrypted Timestamp Checkbox removeDirtyListener( requirePreAuthByEncryptedTimestampCheckbox ); removeSelectionListener( requirePreAuthByEncryptedTimestampCheckbox, requirePreAuthByEncryptedTimestampCheckboxListener ); // Allow Postdated Tickets Checkbox removeDirtyListener( allowPostdatedTicketsCheckbox ); removeSelectionListener( allowPostdatedTicketsCheckbox, allowPostdatedTicketsCheckboxListener ); // Allow Renewable Tickets Checkbox removeDirtyListener( allowRenewableTicketsCheckbox ); removeSelectionListener( allowRenewableTicketsCheckbox, allowRenewableTicketsCheckboxListener ); // Allow Proxiable Tickets Checkbox removeDirtyListener( allowProxiableTicketsCheckbox ); removeSelectionListener( allowProxiableTicketsCheckbox, allowProxiableTicketsCheckboxListener ); // Maximum Renewable Lifetime Text removeDirtyListener( maximumRenewableLifetimeText ); removeModifyListener( maximumRenewableLifetimeText, maximumRenewableLifetimeTextListener ); // Maximum Ticket Lifetime Text removeDirtyListener( maximumTicketLifetimeText ); removeModifyListener( maximumTicketLifetimeText, maximumTicketLifetimeTextListener ); // Allowable Clock Skew Text removeDirtyListener( allowableClockSkewText ); removeModifyListener( allowableClockSkewText, allowableClockSkewTextListener ); } /** * Gets the KDC Server bean. * * @return * the KDC Server bean */ private KdcServerBean getKdcServerBean() { return getKdcServerBean( getDirectoryServiceBean() ); } /** * Gets the KDC Server bean. * * @param directoryServiceBean * the directory service bean * @return * the KDC Server bean */ public static KdcServerBean getKdcServerBean( DirectoryServiceBean directoryServiceBean ) { KdcServerBean kdcServerBean = directoryServiceBean.getKdcServerBean(); if ( kdcServerBean == null ) { kdcServerBean = new KdcServerBean(); directoryServiceBean.addServers( kdcServerBean ); } return kdcServerBean; } /** * Enables the Kerberos Server. * * @param directoryServiceBean the directory service bean * @param enableKerberosServer the enable kerberos flag */ public static void enableKerberosServer( DirectoryServiceBean directoryServiceBean, boolean enableKerberosServer ) { // Enabling the KDC Server getKdcServerBean( directoryServiceBean ).setEnabled( enableKerberosServer ); // Getting the Key Derivation Interceptor InterceptorBean keyDerivationInterceptor = getKeyDerivationInterceptor( directoryServiceBean ); if ( keyDerivationInterceptor != null ) { // Enabling the Key Derivation Interceptor keyDerivationInterceptor.setEnabled( enableKerberosServer ); } } /** * Gets the Change Password Server bean. * * @return * the Change Password Server bean */ private ChangePasswordServerBean getChangePasswordServerBean() { return getChangePasswordServerBean( getDirectoryServiceBean() ); } /** * Gets the Change Password Server bean. * * @param directoryServiceBean * the directory service bean * @return * the Change Password Server bean */ public static ChangePasswordServerBean getChangePasswordServerBean( DirectoryServiceBean directoryServiceBean ) { ChangePasswordServerBean changePasswordServerBean = directoryServiceBean.getChangePasswordServerBean(); if ( changePasswordServerBean == null ) { changePasswordServerBean = new ChangePasswordServerBean(); directoryServiceBean.addServers( changePasswordServerBean ); } return changePasswordServerBean; } /** * Gets the Key Derivation Interceptor. * * @return the Key Derivation Interceptor. */ private static InterceptorBean getKeyDerivationInterceptor( DirectoryServiceBean directoryServiceBean ) { if ( directoryServiceBean != null ) { List<InterceptorBean> interceptors = directoryServiceBean.getInterceptors(); for ( InterceptorBean interceptor : interceptors ) { if ( "org.apache.directory.server.core.kerberos.KeyDerivationInterceptor".equalsIgnoreCase( interceptor .getInterceptorClassName() ) ) { return interceptor; } } } return null; } public static void setKerberosPort( DirectoryServiceBean directoryServiceBean, String portAsText ) { try { int port = Integer.parseInt( portAsText ); KdcServerBean kdcServerBean = directoryServiceBean.getKdcServerBean(); for ( TransportBean transportBean : kdcServerBean.getTransports() ) { transportBean.setSystemPort( port ); } } catch ( NumberFormatException nfe ) { System.out.println( "Wrong Kerberos TCP/UDP Port : it must be an integer" ); } } private void setKerberosAddress( DirectoryServiceBean directoryServiceBean, String address ) { KdcServerBean kdcServerBean = directoryServiceBean.getKdcServerBean(); for ( TransportBean transportBean : kdcServerBean.getTransports() ) { transportBean.setTransportAddress( address ); } } public static void setChangePasswordPort( DirectoryServiceBean directoryServiceBean, String portAsText ) { try { int port = Integer.parseInt( portAsText ); ChangePasswordServerBean changePasswordServerBean = directoryServiceBean.getChangePasswordServerBean(); for ( TransportBean transportBean : changePasswordServerBean.getTransports() ) { transportBean.setSystemPort( port ); } } catch ( NumberFormatException nfe ) { System.out.println( "Wrong ChangePassword TCP/UDP Port : it must be an integer" ); } } private void setChangePasswordAddress( DirectoryServiceBean directoryServiceBean, String address ) { ChangePasswordServerBean changePasswordServerBean = directoryServiceBean.getChangePasswordServerBean(); for ( TransportBean transportBean : changePasswordServerBean.getTransports() ) { transportBean.setTransportAddress( address ); } } }