You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2007/01/18 17:18:24 UTC

svn commit: r497484 - /directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java

Author: elecharny
Date: Thu Jan 18 08:18:23 2007
New Revision: 497484

URL: http://svn.apache.org/viewvc?view=rev&rev=497484
Log:
The URL is now encoded when a Referral exception is thrown. 

Modified:
    directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java

Modified: directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java?view=diff&rev=497484&r1=497483&r2=497484
==============================================================================
--- directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java (original)
+++ directory/branches/apacheds/1.0/core/src/main/java/org/apache/directory/server/core/referral/ReferralService.java Thu Jan 18 08:18:23 2007
@@ -67,6 +67,7 @@
 import org.apache.directory.shared.ldap.message.ModificationItemImpl;
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.name.LdapDN;
+import org.apache.directory.shared.ldap.name.Rdn;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 
 import org.slf4j.Logger;
@@ -181,36 +182,42 @@
     {
         // handle referral here
         List list = new ArrayList( refs.size() );
+        
         for ( int ii = 0; ii < refs.size(); ii++ )
         {
-            String val = ( String ) refs.get( ii );
+            String url = ( String ) refs.get( ii );
 
             // need to add non-ldap URLs as-is
-            if ( !val.startsWith( "ldap" ) )
+            if ( !url.startsWith( "ldap" ) )
             {
-                list.add( val );
+                list.add( url );
                 continue;
             }
 
             // parse the ref value and normalize the DN according to schema 
-            LdapURL ldapUrl = new LdapURL();
+            LdapURL ldapUrl = null;
+            
             try
             {
-                ldapUrl.parse( val.toCharArray() );
+                ldapUrl = new LdapURL( url );;
             }
             catch ( LdapURLEncodingException e )
             {
-                log.error( "Bad URL (" + val + ") for ref in " + farthest + ".  Reference will be ignored." );
+                log.error( "Bad URL (" + url + ") for ref in " + farthest + ".  Reference will be ignored." );
+                list.add( url );
+                continue;
             }
 
-            LdapDN urlDn = new LdapDN( ldapUrl.getDn().toNormName() );
+            LdapDN urlDn = ldapUrl.getDn();
             urlDn.normalize( attrRegistry.getNormalizerMapping() );
+            
             if ( urlDn.equals( farthest ) )
             {
                 // according to the protocol there is no need for the dn since it is the same as this request
                 StringBuffer buf = new StringBuffer();
                 buf.append( ldapUrl.getScheme() );
                 buf.append( ldapUrl.getHost() );
+                
                 if ( ldapUrl.getPort() > 0 )
                 {
                     buf.append( ":" );
@@ -228,24 +235,30 @@
              */
             int diff = targetUpdn.size() - farthest.size();
             LdapDN extra = new LdapDN();
+            
             for ( int jj = 0; jj < diff; jj++ )
             {
-                extra.add( targetUpdn.get( farthest.size() + jj ) );
+                Rdn rdn = targetUpdn.getRdn( farthest.size() + jj );
+                
+                extra.add( rdn );
             }
 
             urlDn.addAll( extra );
             StringBuffer buf = new StringBuffer();
             buf.append( ldapUrl.getScheme() );
             buf.append( ldapUrl.getHost() );
+            
             if ( ldapUrl.getPort() > 0 )
             {
                 buf.append( ":" );
                 buf.append( ldapUrl.getPort() );
             }
+            
             buf.append( "/" );
-            buf.append( urlDn.getUpName() );
+            buf.append( LdapURL.urlEncode( urlDn.getUpName(), false ) );
             list.add( buf.toString() );
         }
+        
         LdapReferralException lre = new LdapReferralException( list );
         throw lre;
     }
@@ -284,7 +297,7 @@
             Attributes referral = invocation.getProxy().lookup( farthest, PartitionNexusProxy.LOOKUP_BYPASS );
             AttributeType refsType = attrRegistry.lookup( oidRegistry.getOid( REF_ATTR ) );
             Attribute refs = ServerUtils.getAttribute( refsType, referral );
-            doReferralException( farthest, new LdapDN( normName.getUpName() ), refs );
+            doReferralException( farthest, (LdapDN)normName.clone(), refs );
         }
         else if ( refval.equals( FOLLOW ) )
         {