Return-Path: X-Original-To: apmail-manifoldcf-commits-archive@www.apache.org Delivered-To: apmail-manifoldcf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 94E5510C18 for ; Thu, 5 Sep 2013 04:56:39 +0000 (UTC) Received: (qmail 6484 invoked by uid 500); 5 Sep 2013 04:56:38 -0000 Delivered-To: apmail-manifoldcf-commits-archive@manifoldcf.apache.org Received: (qmail 6430 invoked by uid 500); 5 Sep 2013 04:56:31 -0000 Mailing-List: contact commits-help@manifoldcf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@manifoldcf.apache.org Delivered-To: mailing list commits@manifoldcf.apache.org Received: (qmail 6421 invoked by uid 99); 5 Sep 2013 04:56:27 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 05 Sep 2013 04:56:27 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 05 Sep 2013 04:56:25 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 2205F2388A02; Thu, 5 Sep 2013 04:56:05 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1520208 - in /manifoldcf/integration/sharepoint-2010/trunk: ./ CHANGES.txt webservice/ webservice/MCPermissions.cs Date: Thu, 05 Sep 2013 04:56:04 -0000 To: commits@manifoldcf.apache.org From: kwright@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130905045605.2205F2388A02@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kwright Date: Thu Sep 5 04:56:04 2013 New Revision: 1520208 URL: http://svn.apache.org/r1520208 Log: Fix for CONNECTORS-754. Modified: manifoldcf/integration/sharepoint-2010/trunk/ (props changed) manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt manifoldcf/integration/sharepoint-2010/trunk/webservice/ (props changed) manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs Propchange: manifoldcf/integration/sharepoint-2010/trunk/ ------------------------------------------------------------------------------ Merged /manifoldcf/integration/sharepoint-2010/branches/CONNECTORS-754:r1519947-1520207 Modified: manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt?rev=1520208&r1=1520207&r2=1520208&view=diff ============================================================================== --- manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt (original) +++ manifoldcf/integration/sharepoint-2010/trunk/CHANGES.txt Thu Sep 5 04:56:04 2013 @@ -3,6 +3,9 @@ $Id$ ======================= 0.3-dev ===================== +CONNECTORS-754: Remove dependency on Permissions.asmx. +(Will Parkinson, Karl Wright) + CONNECTORS-758: Change log output to go to trace log. (Christian M. Rieck, Will Parkinson, Karl Wright) Propchange: manifoldcf/integration/sharepoint-2010/trunk/webservice/ ------------------------------------------------------------------------------ Merged /manifoldcf/integration/sharepoint-2010/branches/CONNECTORS-754/webservice:r1519947-1520207 Modified: manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs URL: http://svn.apache.org/viewvc/manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs?rev=1520208&r1=1520207&r2=1520208&view=diff ============================================================================== --- manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs (original) +++ manifoldcf/integration/sharepoint-2010/trunk/webservice/MCPermissions.cs Thu Sep 5 04:56:04 2013 @@ -42,6 +42,8 @@ namespace MetaCarta.SharePoint.SoapServe #region Private Fields private readonly string itemType = "Item"; + private readonly string listType = "List"; + private readonly string webType = "Web"; #endregion @@ -59,24 +61,19 @@ namespace MetaCarta.SharePoint.SoapServe { retVal = GetItemPermissions(objectName); } + else if (objectType.Equals(listType)) + { + retVal = GetListPermissions(objectName); + } + else if (objectType.Equals(webType)) + { + retVal = GetWebPermissions(objectName); + } else { - ServicePointManager.ServerCertificateValidationCallback += - new RemoteCertificateValidationCallback(ValidateCertificate); - - using (SPPermissionsService.Permissions service = new SPPermissionsService.Permissions()) - { - service.Url = SPContext.Current.Web.Url + "/_vti_bin/Permissions.asmx"; - service.Credentials = System.Net.CredentialCache.DefaultCredentials; - - retVal = service.GetPermissionCollection(objectName, objectType); - } + throw new Exception("Unknown permission type: " + objectType); } } - catch (SoapException soapEx) - { - throw soapEx; - } catch (Exception ex) { SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MCPermissions.asmx", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, "Error: "+ex.Message+"; SPContext.Current.Web.Url='"+SPContext.Current.Web.Url+"'", ex.StackTrace); @@ -168,6 +165,42 @@ namespace MetaCarta.SharePoint.SoapServe #region Private Methods /// + /// Given the name of a list, return an XML fragment describing the set of permissions + /// for the specified list. + /// + /// A string containing the name of a list item + /// An XML fragment + private XmlNode GetListPermissions(string listName) + { + if (string.IsNullOrEmpty(listName)) + throw RaiseException("Parameter 'objectName' cannot be null or empty.", "2000", "GetPermissionCollection"); + + using (SPWeb site = SPContext.Current.Web) + { + SPList item = site.GetList(listName); + + return PopulateResponse(item); + } + } + + /// + /// Given the current site, return an XML fragment describing the set of permissions + /// for the site. + /// + /// A string containing the name of a list item + /// An XML fragment + private XmlNode GetWebPermissions(string siteName) + { + if (!siteName.Equals("/")) + throw RaiseException("Parameter 'objectName' must be /", "2000", "GetPermissionCollection"); + + using (SPWeb site = SPContext.Current.Web) + { + return PopulateResponse(site); + } + } + + /// /// Given the name of a list item, return an XML fragment describing the set of permissions /// for the specified list item. /// @@ -175,8 +208,6 @@ namespace MetaCarta.SharePoint.SoapServe /// An XML fragment private XmlNode GetItemPermissions(string itemName) { - XmlNode retVal = null; - if (string.IsNullOrEmpty(itemName)) throw RaiseException("Parameter 'objectName' cannot be null or empty.", "2000", "GetPermissionCollection"); @@ -184,34 +215,39 @@ namespace MetaCarta.SharePoint.SoapServe { SPListItem item = site.GetListItem(itemName); - if (item.RoleAssignments.Count > 0) - { - XmlDocument doc = new XmlDocument(); - retVal = doc.CreateElement("GetPermissionCollection", - "http://schemas.microsoft.com/sharepoint/soap/directory/"); - XmlNode permissionsNode = doc.CreateElement("Permissions"); - - // A list item can have one or more role assignments. Each role assignment - // represents a member (user or group) with one or more permissions. - // The code below creates a Permission node for every member-permission assignment. - foreach (SPRoleAssignment assignment in item.RoleAssignments) - { - SPPrincipal member = assignment.Member; + return PopulateResponse(item); + } + } - foreach (SPRoleDefinition roleDefinition in assignment.RoleDefinitionBindings) - { - XmlNode permissionNode = CreatePermissionNode(doc, member, roleDefinition); - permissionsNode.AppendChild(permissionNode); - } + private XmlNode PopulateResponse(SPSecurableObject item) + { + XmlNode retVal = null; + if (item.RoleAssignments.Count > 0) + { + XmlDocument doc = new XmlDocument(); + retVal = doc.CreateElement("GetPermissionCollection", + "http://schemas.microsoft.com/sharepoint/soap/directory/"); + XmlNode permissionsNode = doc.CreateElement("Permissions"); + + // A list item can have one or more role assignments. Each role assignment + // represents a member (user or group) with one or more permissions. + // The code below creates a Permission node for every member-permission assignment. + foreach (SPRoleAssignment assignment in item.RoleAssignments) + { + SPPrincipal member = assignment.Member; - retVal.AppendChild(permissionsNode); + foreach (SPRoleDefinition roleDefinition in assignment.RoleDefinitionBindings) + { + XmlNode permissionNode = CreatePermissionNode(doc, member, roleDefinition); + permissionsNode.AppendChild(permissionNode); } + + retVal.AppendChild(permissionsNode); } } - return retVal; } - + private XmlNode CreatePermissionNode(XmlDocument doc, SPPrincipal member, SPRoleDefinition roleDefinition) { XmlNode retVal = doc.CreateElement("Permission");