Changeset 25309

Show
Ignore:
Timestamp:
28.03.2012 16:52:24 (8 years ago)
Author:
sjm84
Message:

Fixed the associated files security hole (I think)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/core/URLFilter.java

    r25306 r25309  
    2222import org.w3c.dom.Document; 
    2323import org.w3c.dom.Element; 
     24import org.w3c.dom.NodeList; 
    2425 
    2526public class URLFilter implements Filter 
     
    134135 
    135136                Element metaResponse = (Element) gsRouter.process(metaMessage); 
    136                 //GSXML.printXMLNode(metaResponse, true); 
     137                GSXML.printXMLNode(metaResponse, true); 
     138                 
     139                NodeList metadataList = metaResponse.getElementsByTagName(GSXML.METADATA_ELEM); 
     140                if(metadataList.getLength() == 0) 
     141                { 
     142                    _logger.error("Could not find the document related to this url"); 
     143                } 
     144                else 
     145                { 
     146                    Element metadata = (Element)metadataList.item(0); 
     147                    String document = metadata.getTextContent(); 
     148                     
     149                    //Get the security info for this collection 
     150                    Element securityMessage = gsDoc.createElement(GSXML.MESSAGE_ELEM); 
     151                    Element securityRequest = GSXML.createBasicRequest(gsDoc, GSXML.REQUEST_TYPE_SECURITY, collection, new UserContext()); 
     152                    securityMessage.appendChild(securityRequest); 
     153                    if (document != null && !document.equals("")) 
     154                    { 
     155                        securityRequest.setAttribute(GSXML.NODE_OID, document); 
     156                    } 
     157 
     158                    Element securityResponse = (Element) GSXML.getChildByTagName(gsRouter.process(securityMessage), GSXML.RESPONSE_ELEM); 
     159                    ArrayList<String> groups = GSXML.getGroupsFromSecurityResponse(securityResponse); 
     160                     
     161                    if (!groups.contains("")) 
     162                    { 
     163                        boolean found = false; 
     164                        for (String group : groups) 
     165                        { 
     166                            if (((HttpServletRequest)request).isUserInRole(group)) 
     167                            { 
     168                                found = true; 
     169                                break; 
     170                            } 
     171                        } 
     172                         
     173                        if(!found) 
     174                        { 
     175                            return; 
     176                        } 
     177                    } 
     178                } 
    137179            } 
    138180            else