changeset 7300:f46c291ddeab

8031395: Enhance LDAP processing Reviewed-by: weijun, coffeys
author robm
date Mon, 27 Jan 2014 13:42:59 +0000
parents 02ae50be6e7b
children 795654fce29c
files src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java
diffstat 2 files changed, 36 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java	Fri Jan 24 22:40:21 2014 +0400
+++ b/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java	Mon Jan 27 13:42:59 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,10 @@
 
 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.*;
@@ -34,6 +38,8 @@
 
 final class LdapBindingEnumeration extends LdapNamingEnumeration {
 
+    private final AccessControlContext acc = AccessController.getContext();
+
     LdapBindingEnumeration(LdapCtx homeCtx, LdapResult answer, Name remain,
         Continuation cont) throws NamingException
     {
@@ -41,7 +47,7 @@
     }
 
     protected NameClassPair
-      createItem(String dn, Attributes attrs, Vector respCtls)
+      createItem(String dn, final Attributes attrs, Vector respCtls)
         throws NamingException {
 
         Object obj = null;
@@ -49,7 +55,16 @@
 
         if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) {
             // serialized object or object reference
-            obj = Obj.decodeObject(attrs);
+            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) {
             // DirContext object
--- a/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java	Fri Jan 24 22:40:21 2014 +0400
+++ b/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java	Mon Jan 27 13:42:59 2014 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,10 @@
 
 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.*;
@@ -39,6 +43,8 @@
     private Name startName;             // prefix of names of search results
     private LdapCtx.SearchArgs searchArgs = null;
 
+    private final AccessControlContext acc = AccessController.getContext();
+
     LdapSearchEnumeration(LdapCtx homeCtx, LdapResult search_results,
         String starter, LdapCtx.SearchArgs args, Continuation cont)
         throws NamingException {
@@ -53,7 +59,7 @@
     }
 
     protected NameClassPair
-    createItem(String dn, Attributes attrs, Vector respCtls)
+    createItem(String dn, final Attributes attrs, Vector respCtls)
         throws NamingException {
 
         Object obj = null;
@@ -110,8 +116,16 @@
             if (attrs.get(Obj.JAVA_ATTRIBUTES[Obj.CLASSNAME]) != null) {
                 // Entry contains Java-object attributes (ser/ref object)
                 // serialized object or object reference
-                obj = Obj.decodeObject(attrs);
-
+                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);