From 134667c81d645343178e23fedb33267a69006062 Mon Sep 17 00:00:00 2001 From: Martin Haase <martin.haase@daasi.de> Date: Mon, 13 Jun 2011 10:10:57 +0000 Subject: [PATCH] markus' work on chunked sid filtering; fixed TG-1441 git-svn-id: https://textgridlab.org/svn/textgrid/trunk/middleware/tgauth@10112 7c539038-3410-0410-b1ec-0f2a7bf1c452 --- .../rbacSoap/TgExtra.class.php | 83 +++++++++++++++---- .../rbacSoap/examples/createProject.php | 8 -- 2 files changed, 65 insertions(+), 26 deletions(-) diff --git a/info.textgrid.middleware.tgauth.rbac/rbacSoap/TgExtra.class.php b/info.textgrid.middleware.tgauth.rbac/rbacSoap/TgExtra.class.php index bc4e16d..dca027e 100755 --- a/info.textgrid.middleware.tgauth.rbac/rbacSoap/TgExtra.class.php +++ b/info.textgrid.middleware.tgauth.rbac/rbacSoap/TgExtra.class.php @@ -645,6 +645,9 @@ class TgExtra { $filterBySidResult = Array(); // The resources that pass the filter $arrRole = Array(); + $arrResource = Array(); + $arrFilter = Array(); + $arrHandle = Array(); $result = new filterResponse(); // The result @@ -676,49 +679,93 @@ class TgExtra { } + $arrResTmp = Array(); - // Construct a filter with all resources and - // all roles/permissions - $filter = "(&(objectClass=rbacResource)(|"; + for( $i = 0; $i < sizeof( $res ); $i++ ) { + $arrResTmp[] = $res[$i]; - for( $i = 0; $i < sizeof( $res ); $i++ ) { - $filter .= "(" . $this->rbac->getConfiguration()->getValue( "resource", "aliasattribute" ) . "=" . $res[$i] . ")"; + if( ($i > 0) && ($i % 400 === 0) ) { + + $arrResource[] = $arrResTmp; + $arrResTmp = Array(); + + } } - $filter .= ")(|"; + $arrResource[] = $arrResTmp; + unset( $res ); - for( $i = 0; $i < sizeof( $arrRole ); $i++ ) { + for( $loParSearch = 0; $loParSearch < sizeof( $arrResource ); $loParSearch++ ) { - $filter .= "(rbacPermission=" . $arrRole[$i] . ":-:" . $inRequest->operation . ")"; + // Construct a filter with all resources and + // all roles/permissions + $filter = "(&(objectClass=rbacResource)(|"; - } + for( $i = 0; $i < sizeof( $arrResource[$loParSearch] ); $i++ ) { + + $filter .= "(" . $this->rbac->getConfiguration()->getValue( "resource", "aliasattribute" ) . "=" . $arrResource[$loParSearch][$i] . ")"; + + } + + + $filter .= ")(|"; + + + for( $i = 0; $i < sizeof( $arrRole ); $i++ ) { + + $filter .= "(rbacPermission=" . $arrRole[$i] . ":-:" . $inRequest->operation . ")"; + + } - $filter .= "(TgIsPublic=TRUE)(TgIsProjectFile=TRUE)))"; + + $filter .= "(TgIsPublic=TRUE)(TgIsProjectFile=TRUE)))"; + + + $arrFilter[] = $filter; + $arrHandle[] = $this->connection['resource']->getConnection(); + + } // If we do not free some memory we might // consume enormous resources + unset( $filter ); unset( $arrRole ); - unset( $res ); + unset( $arrResource ); - $arrResult = $this->connection['resource']->search( $this->rbac->getConfiguration()->getValue( "resource", "base" ), - $filter, "sub", Array( "tgResourceURI" ) ); +// $arrResult = $this->connection['resource']->search( $this->rbac->getConfiguration()->getValue( "resource", "base" ), +// $filter, "sub", Array( "tgResourceURI" ) ); + $arrParSearchResult = ldap_search( $arrHandle, $this->rbac->getConfiguration()->getValue( "resource", "base" ), $arrFilter, Array( "tgResourceURI" ) ); + + + unset( $arrFilter ); - // We do not need the filter anymore - unset( $filter ); + if( !is_array( $arrParSearchResult ) ) { - for( $i = 0; $i < sizeof( $arrResult ); $i++ ) { + $arrParSearchResult = Array( $arrParSearchResult ); - $result->resource[] = $arrResult[$i]['tgresourceuri'][0]; + } + + + for( $loParSearch = 0; $loParSearch < sizeof( $arrParSearchResult ); $loParSearch++ ) { + + $arrResult = ldap_get_entries( $arrHandle[$loParSearch], $arrParSearchResult[$loParSearch] ); + + + for( $i = 0; $i < $arrResult['count']; $i++ ) { + + $result->resource[] = $arrResult[$i]['tgresourceuri'][0]; + + } } @@ -2877,7 +2924,7 @@ class TgExtra { /* Old-style project IDs can be found this way but not IDs using a UUID preg_match ( '/(TGPR\d+)/', $arrRole[$i]["dn"], $tgpr); */ - preg_match ( '/(TGPR)/', $arrRole[$i]["dn"], $tgpr); + preg_match ( '/(TGPR[^,]+)/', $arrRole[$i]["dn"], $tgpr); $arrProject = $this->rbac->getConnection( "role" )->getEntry( "rbacName=" . $tgpr[1] . diff --git a/info.textgrid.middleware.tgauth.rbac/rbacSoap/examples/createProject.php b/info.textgrid.middleware.tgauth.rbac/rbacSoap/examples/createProject.php index 10441d1..8e5f261 100755 --- a/info.textgrid.middleware.tgauth.rbac/rbacSoap/examples/createProject.php +++ b/info.textgrid.middleware.tgauth.rbac/rbacSoap/examples/createProject.php @@ -66,14 +66,6 @@ if( isset( $_POST['auth'] ) ) { echo "<FORM action=\"createProject.php\" method=\"post\" enctype=\"multipart/form-data\">\n"; -echo "Target: "; -echo "<SELECT name=\"wsdl\">\n"; - -for( $i = 0; $i < sizeof( $arrExtraWsdl ); $i++ ) { - - echo "<OPTION value=\"" . $i . "\">" . $arrExtraWsdl[$i]['name'] . "</OPTION>\n"; - -} echo "</SELECT><BR>\n"; echo "Auth: <INPUT type=\"text\" name=\"auth\" value=\"\"><BR>\n"; -- GitLab