| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package com.sun.jndi.ldap;  | 
 | 
 | 
 | 
import java.security.AccessControlContext;  | 
 | 
import java.security.AccessController;  | 
 | 
import java.security.PrivilegedActionException;  | 
 | 
import java.security.PrivilegedExceptionAction;  | 
 | 
import java.util.Vector;  | 
 | 
import javax.naming.*;  | 
 | 
import javax.naming.directory.*;  | 
 | 
import javax.naming.ldap.Control;  | 
 | 
import javax.naming.spi.*;  | 
 | 
 | 
 | 
import com.sun.jndi.toolkit.ctx.Continuation;  | 
 | 
 | 
 | 
final class LdapBindingEnumeration  | 
 | 
        extends AbstractLdapNamingEnumeration<Binding> { | 
 | 
 | 
 | 
    private final AccessControlContext acc = AccessController.getContext();  | 
 | 
 | 
 | 
    LdapBindingEnumeration(LdapCtx homeCtx, LdapResult answer, Name remain,  | 
 | 
        Continuation cont) throws NamingException  | 
 | 
    { | 
 | 
        super(homeCtx, answer, remain, cont);  | 
 | 
    }  | 
 | 
 | 
 | 
    @Override  | 
 | 
    protected Binding  | 
 | 
      createItem(String dn, Attributes attrs, Vector<Control> respCtls)  | 
 | 
        throws NamingException { | 
 | 
 | 
 | 
        Object obj = null;  | 
 | 
        String atom = getAtom(dn);  | 
 | 
 | 
 | 
        if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) { | 
 | 
              | 
 | 
            try { | 
 | 
                obj = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() { | 
 | 
                    @Override  | 
 | 
                    public Object run() throws NamingException { | 
 | 
                        return Obj.decodeObject(attrs);  | 
 | 
                    }  | 
 | 
                }, acc);  | 
 | 
            } catch (PrivilegedActionException e) { | 
 | 
                throw (NamingException)e.getException();  | 
 | 
            }  | 
 | 
        }  | 
 | 
        if (obj == null) { | 
 | 
              | 
 | 
            obj = new LdapCtx(homeCtx, dn);  | 
 | 
        }  | 
 | 
 | 
 | 
        CompositeName cn = new CompositeName();  | 
 | 
        cn.add(atom);  | 
 | 
 | 
 | 
        try { | 
 | 
            obj = DirectoryManager.getObjectInstance(obj, cn, homeCtx,  | 
 | 
                homeCtx.envprops, attrs);  | 
 | 
 | 
 | 
        } catch (NamingException e) { | 
 | 
            throw e;  | 
 | 
 | 
 | 
        } catch (Exception e) { | 
 | 
            NamingException ne =  | 
 | 
                new NamingException(  | 
 | 
                        "problem generating object using object factory");  | 
 | 
            ne.setRootCause(e);  | 
 | 
            throw ne;  | 
 | 
        }  | 
 | 
 | 
 | 
        Binding binding;  | 
 | 
        if (respCtls != null) { | 
 | 
           binding = new BindingWithControls(cn.toString(), obj,  | 
 | 
                                homeCtx.convertControls(respCtls));  | 
 | 
        } else { | 
 | 
            binding = new Binding(cn.toString(), obj);  | 
 | 
        }  | 
 | 
        binding.setNameInNamespace(dn);  | 
 | 
        return binding;  | 
 | 
    }  | 
 | 
 | 
 | 
    @Override  | 
 | 
    protected AbstractLdapNamingEnumeration<? extends NameClassPair> getReferredResults(  | 
 | 
            LdapReferralContext refCtx) throws NamingException{ | 
 | 
          | 
 | 
        return (AbstractLdapNamingEnumeration<? extends NameClassPair>)refCtx.listBindings(listArg);  | 
 | 
    }  | 
 | 
}  |