You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/09/23 00:44:01 UTC
svn commit: r291028 -
/directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java
Author: akarasulu
Date: Thu Sep 22 15:43:59 2005
New Revision: 291028
URL: http://svn.apache.org/viewcvs?rev=291028&view=rev
Log:
moved schema checks into the schema checking interceptor
Modified:
directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java
Modified: directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java
URL: http://svn.apache.org/viewcvs/directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java?rev=291028&r1=291027&r2=291028&view=diff
==============================================================================
--- directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java (original)
+++ directory/protocol-providers/ldap/trunk/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java Thu Sep 22 15:43:59 2005
@@ -19,9 +19,6 @@
import javax.naming.NamingException;
import javax.naming.directory.ModificationItem;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.Attribute;
import javax.naming.ldap.LdapContext;
import org.apache.ldap.common.exception.LdapException;
@@ -31,12 +28,6 @@
import org.apache.ldap.common.message.ModifyResponseImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
-import org.apache.ldap.common.schema.ObjectClass;
-import org.apache.ldap.common.schema.AttributeType;
-import org.apache.ldap.server.schema.AttributeTypeRegistry;
-import org.apache.ldap.server.schema.ObjectClassRegistry;
-import org.apache.ldap.server.schema.OidRegistry;
-import org.apache.ldap.server.jndi.ContextFactoryService;
import org.apache.mina.protocol.ProtocolSession;
import org.apache.mina.protocol.handler.MessageHandler;
@@ -56,31 +47,6 @@
private static final ModificationItem[] EMPTY = new ModificationItem[0];
- public boolean isRequired( String attrId, Attribute objectClass ) throws NamingException
- {
- OidRegistry oidRegistry = ContextFactoryService.getInstance().
- getConfiguration().getGlobalRegistries().getOidRegistry();
- ObjectClassRegistry registry = ContextFactoryService.getInstance().
- getConfiguration().getGlobalRegistries().getObjectClassRegistry();
-
- String attrOid = oidRegistry.getOid( attrId );
- for ( int ii = 0; ii < objectClass.size(); ii++ )
- {
- ObjectClass ocSpec = registry.lookup( ( String ) objectClass.get( ii ) );
- AttributeType[] mustList = ocSpec.getMustList();
- for ( int jj = 0; jj < mustList.length; jj++ )
- {
- if ( mustList[jj].getOid().equals( attrOid ) )
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
-
public void messageReceived( ProtocolSession session, Object request )
{
ModifyRequest req = ( ModifyRequest ) request;
@@ -90,54 +56,7 @@
try
{
LdapContext ctx = SessionRegistry.getSingleton().getLdapContext( session, null, true );
- Attributes entry = ctx.getAttributes( req.getName() );
Object[] mods = req.getModificationItems().toArray( EMPTY );
-
- /*
- * Check first to see if the modification request is valid by looking
- * at the attributes being modified. Some modification operations are
- * invalid if the attributes they modify do not exist or are undefined
- */
- AttributeTypeRegistry registry = ContextFactoryService.getInstance().
- getConfiguration().getGlobalRegistries().getAttributeTypeRegistry();
-
- // As I write this code I am begining to realize that this should really
- // be located within the schema interceptor for schema checking however
- // resolution of what kind of operation is being performed is often lost
- // @todo figure out how to best integrate this code into the schema interceptor
-
- for ( int ii = 0; ii < mods.length; ii++ )
- {
- ModificationItem item = ( ModificationItem ) mods[ii];
- String id = item.getAttribute().getID();
- Attribute attr = entry.get( id );
-
- if ( ! registry.hasAttributeType( id ) )
- {
- resp.getLdapResult().setResultCode( ResultCodeEnum.UNDEFINEDATTRIBUTETYPE );
- resp.getLdapResult().setMatchedDn( req.getName() );
- session.write( resp );
- return;
- }
-
-
- if ( item.getModificationOp() == DirContext.REMOVE_ATTRIBUTE && attr == null )
- {
- resp.getLdapResult().setResultCode( ResultCodeEnum.NOSUCHATTRIBUTE );
- resp.getLdapResult().setMatchedDn( req.getName() );
- session.write( resp );
- return;
- }
-
- if ( item.getModificationOp() == DirContext.REMOVE_ATTRIBUTE && isRequired( id, entry.get( "objectClass" ) ) )
- {
- resp.getLdapResult().setResultCode( ResultCodeEnum.OBJECTCLASSVIOLATION );
- resp.getLdapResult().setMatchedDn( req.getName() );
- session.write( resp );
- return;
- }
- }
-
ctx.modifyAttributes( req.getName(), ( ModificationItem[] ) mods );
}
catch ( NamingException e )