Hi Karl, Thanks Karl.
I have added the Sharepoint Active Directory Authority in my authorization group with this entry: Domain controller name: 10.10.10.102 user: [email protected] Authentication: SIMPLE Login name AD attribute : userPrincipalName and I have added the Sharepoint Native Authority in same authorization group with this entry: Server SharePoint version: SharePoint Services 5.0 (2013) Claims based authorization: Enabled Server protocol: http I have requested to http://localhost:8345/mcf-authority-service/[email protected] USERNOTFOUND:sharepoint++native AUTHORIZED:sharepoint+Active+directory TOKEN:Authority+Group:Ui%3A0%23.w%7Cmydomain.com%255cmyuser TOKEN:Authority+Group:Uc%3A0%2B.w%7Cs-1-5-32-545 TOKEN:Authority+Group:Uc%3A0%2B.w%7Cs-1-5-21-151231991-263585328-740192949-513 TOKEN:Authority+Group:Ui%3A0%2B.w%7Cs-1-5-21-151231991-263585328-740192949-1142 TOKEN:Authority+Group:Uc%3A0%21.s%7Cwindows TOKEN:Authority+Group:Uc%3A0%28.s%7Ctrue If I use myuser@mydomain instead of [email protected] as folow http://localhost:8345/mcf-authority-service/UserACLs?username=myuser@mydomain , the response: AUTHORIZED:sharepoint++native TOKEN:Authority+Group:Ui%3A0%23.w%7Cmydomain%5Cmyuser TOKEN:Authority+Group:Gtestsite+Members USERNOTFOUND:sharepoint+Active+directory I selected Authority Type as Sharepoint in Repository Connection in MFC and run the job. The files have been indexed. Then, I have searched from Solr using "[email protected]" , return 0 response. If I use "myuser@mydomain instead" of "[email protected]", return response as follow: The search response is seen as follow: .... "allow_token_document":["Authority+Group:Ui%3A0%23.w%7Cmydomain%5Cadministrator", "Authority+Group:GExcel+Services+Viewers", "Authority+Group:GRestricted+Readers", "Authority+Group:Gtestsite+Members", "Authority+Group:GHierarchy+Managers", "Authority+Group:GApprovers", "Authority+Group:Gtestsite+Visitors", "Authority+Group:Gtestsite+Owners", "Authority+Group:GDesigners"]}] .... That's perfectly OK. On the other hand, I selected Authority Type as Active Directory in Repository Connection and run the job. The files have been indexed. But I still haven't any ACL in my solr index. ... "allow_token_document":["Authority+Group:"], ... 1- Why should I use "myuser@mydomain" instead of "[email protected]" ? How to be fixed it ? 2- Why didn't I still see the ACL in my solr ? 2016-12-30 16:55 GMT+03:00 Karl Wright <[email protected]>: > Also, FWIW, I can see that the user logins are in fact native and are in > claims-based form, so your sharepoint is *definitely* configured to be > claims-based. > > Thanks, > Karl > > > On Fri, Dec 30, 2016 at 8:52 AM, Karl Wright <[email protected]> wrote: > >> Hi Cihad, >> >> I am almost certain your Sharepoint 2013 setup is using claims-based >> authorization, since that is the default for Sharepoint 2013 and the >> installer would have had to select something else to override that default. >> >> Claims-based auth works fine with ActiveDirectory but you must use >> different MCF authorities with claims-based auth than you would with >> non-claims-based auth. If your users are all in groups, and your documents >> are secured by groups, then your ACLs will describe those groups and NOT >> the SIDs. That's perfectly OK. You simply need to have BOTH the >> Sharepoint Active Directory Authority and the Sharepoint Native Authority >> in your authorization group and everything maps as it should. Of course, >> that authorization group must be the one referenced by your Sharepoint >> Repository Connection or the authorization won't work. >> >> Please try this and let me know if it works for you. >> >> Karl >> >> >> On Fri, Dec 30, 2016 at 8:25 AM, Cihad Guzel <[email protected]> wrote: >> >>> Hi Karl, >>> >>> I have changed the authority group as Native Sharepoint instead of >>> Active Directory and I could see the allow tokens in Solr index as follow: >>> >>> "allow_token_document":["Authority+Group:Ui%3A0%23.w%7Clagom >>> %5Cadministrator", >>> "Authority+Group:GExcel+Services+Viewers", >>> "Authority+Group:GRestricted+Readers", >>> "Authority+Group:Gtestsite+Members", >>> "Authority+Group:GHierarchy+Managers", >>> "Authority+Group:GApprovers", >>> "Authority+Group:Gtestsite+Visitors", >>> "Authority+Group:Gtestsite+Owners", >>> "Authority+Group:GDesigners"], >>> >>> >>> If I select the "Active Directory" setting, I don't see any tokens. >>> >>> "allow_token_document":["Authority+Group:"], >>> >>> I tried user profile synchronization from Active Directory. I followed >>> https://blogs.technet.microsoft.com/meacoex/2013/08/04/step- >>> by-step-active-directory-import-for-sharepoint-2013/ >>> I could see all Active Directory users in Sharepoint. Then, I request >>> GetUserInfo and GetGroupCollectionFromUser in Sharepoint API via soapUI but >>> the Sid field is empty for all user. You can see the response as follow: >>> >>> <GetUserInfo> >>> <User ID="17" Sid="" Name="testUser" LoginName="i:0#.w|lagom\testUser" >>> Email="[email protected]" Notes="" IsSiteAdmin="False" >>> IsDomainGroup="False" Flags="0"/> >>> </GetUserInfo> >>> >>> <GetUserCollectionFromGroup> >>> <Users> >>> <User ID="17" Sid="" Name="testUser" LoginName="i:0#.w|lagom\testUser" >>> Email="[email protected]" Notes="" IsSiteAdmin="False" >>> IsDomainGroup="False" Flags="0"/> >>> <User ID="18" Sid="" Name="testUser2" >>> LoginName="i:0#.w|lagom\testUser2" Email="" Notes="" >>> IsSiteAdmin="False" IsDomainGroup="False" Flags="0"/> >>> </Users> >>> </GetUserCollectionFromGroup> >>> >>> I created an issue on stackexchange. You can see from: >>> http://sharepoint.stackexchange.com/questions/203761/sid-hav >>> e-empty-values-after-sharepoint-userprofile-sync >>> I can see the "sid" value, If I request to sharepoint rest api as like: >>> <siteurl>/_api/sp.userprofiles.peoplemanager/getuserprofilepropertyfor(accountname=@v, >>> propertyname='SID')?@v='testdomain\testUser' >>> >>> The response: >>> <d:GetUserProfilePropertyFor xmlns:d="http://schemas.micros >>> oft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.micros >>> oft.com/ado/2007/08/dataservices/metadata" xmlns:georss=" >>> http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml >>> ">S-1-5-21-151231991-263585328-740192949-1109</d:GetU >>> serProfilePropertyFor> >>> >>> Then I saw a manifoldcf issue : https://issues.apache.org/ji >>> ra/browse/CONNECTORS-754 . The issue was resolved. But I'm having the >>> same problem. >>> >>> >>> >>> >>> >>> >>> >>> 2016-12-28 14:41 GMT+03:00 Karl Wright <[email protected]>: >>> >>>> Hi Cihad, >>>> >>>> In your case, then, the connector is calling the "Users: >>>> GetUserCollectionFromGroup" SOAP method in the SharePoint API. This >>>> method is supposed to list the users that belong to the group, but I >>>> suspect that your SharePoint instance is not set up to work in that way, >>>> and that you should in fact set your MCF up as follows: >>>> >>>> - Do NOT select the "Active directory" setting. Use "claims-based" >>>> instead. >>>> - Use the appropriate SharePoint "native" authority. >>>> >>>> Read up on how to do that here: >>>> >>>> http://manifoldcf.apache.org/release/release-2.5/en_US/end-u >>>> ser-documentation.html#sharepointrepository >>>> >>>> Thanks, >>>> Karl >>>> >>>> >>>> On Wed, Dec 28, 2016 at 6:26 AM, Cihad Guzel <[email protected]> wrote: >>>> >>>>> Hi Karl, >>>>> >>>>> I selected "Active Directory". My SharePoint server run with Active >>>>> Directory. >>>>> >>>>> 2016-12-28 14:13 GMT+03:00 Karl Wright <[email protected]>: >>>>> >>>>>> Hi Cihad, >>>>>> >>>>>> The code for looking for document ACLs is as follows: >>>>>> >>>>>> >>>>>> >>>>>> Object node = nodeList.get( i ); >>>>>> String mask = doc.getValue( node, "Mask" ); >>>>>> long maskValue = new Long(mask).longValue(); >>>>>> if ((maskValue & 1L) == 1L) >>>>>> { >>>>>> // Permission to view >>>>>> String isUser = doc.getValue( node, "MemberIsUser" ); >>>>>> >>>>>> if ( isUser.compareToIgnoreCase("True") == 0 ) >>>>>> { >>>>>> // Use AD user or group >>>>>> String userLogin = doc.getValue( node, "UserLogin" ); >>>>>> String userSid = getSidForUser( userCall, userLogin, >>>>>> activeDirectoryAuthority ); >>>>>> sids.add( userSid ); >>>>>> } >>>>>> else >>>>>> { >>>>>> // Role >>>>>> List<String> roleSids; >>>>>> String roleName = doc.getValue( node, "RoleName" ); >>>>>> if ( roleName.length() == 0) >>>>>> { >>>>>> roleName = doc.getValue(node,"GroupName"); >>>>>> roleSids = getSidsForGroup(userCall, roleName, >>>>>> activeDirectoryAuthority); >>>>>> } >>>>>> else >>>>>> { >>>>>> roleSids = getSidsForRole(userCall, roleName, >>>>>> activeDirectoryAuthority); >>>>>> } >>>>>> >>>>>> for (String sid : roleSids) >>>>>> { >>>>>> sids.add( sid ); >>>>>> } >>>>>> } >>>>>> } >>>>>> >>>>>> <<<<<< >>>>>> >>>>>> So, in your example, getSidsForGroup() should be getting called. The >>>>>> code for that is as follows: >>>>>> >>>>>> >>>>>> >>>>>> private List<String> getSidsForGroup(com.microsoft. >>>>>> schemas.sharepoint.soap.directory.UserGroupSoap userCall, String >>>>>> groupName, >>>>>> boolean activeDirectoryAuthority) >>>>>> throws ManifoldCFException, java.net.MalformedURLException, >>>>>> javax.xml.rpc.ServiceException, java.rmi.RemoteException >>>>>> { >>>>>> List<String> rval = new ArrayList<String>(); >>>>>> >>>>>> com.microsoft.schemas.sharepoint.soap.directory.GetUserColle >>>>>> ctionFromGroupResponseGetUserCollectionFromGroupResult roleResp = >>>>>> userCall.getUserCollectionFromGroup(groupName); >>>>>> org.apache.axis.message.MessageElement[] roleList = >>>>>> roleResp.get_any(); >>>>>> >>>>>> if (roleList.length != 1) >>>>>> throw new ManifoldCFException("Bad response - expecting one >>>>>> outer 'GetUserCollectionFromGroup' node, saw >>>>>> "+Integer.toString(roleList.le >>>>>> ngth)); >>>>>> >>>>>> MessageElement roles = roleList[0]; >>>>>> if (!roles.getElementName().getLocalName().equals("GetUserColle >>>>>> ctionFromGroup")) >>>>>> throw new ManifoldCFException("Bad response - outer node should >>>>>> have been 'GetUserCollectionFromGroup' node"); >>>>>> >>>>>> Iterator rolesIter = roles.getChildElements(); >>>>>> >>>>>> if (!activeDirectoryAuthority) >>>>>> { >>>>>> // We need not only the group itself, but its user children >>>>>> that are Claims-based entities >>>>>> rval.add("G"+groupName); >>>>>> while (rolesIter.hasNext()) >>>>>> { >>>>>> MessageElement child = (MessageElement)rolesIter.next(); >>>>>> if (child.getElementName().getLocalName().equals("Users")) >>>>>> { >>>>>> Iterator usersIterator = child.getChildElements(); >>>>>> while (usersIterator.hasNext()) >>>>>> { >>>>>> MessageElement user = (MessageElement)usersIterator. >>>>>> next(); >>>>>> if (user.getElementName().getLocalName().equals("User")) >>>>>> { >>>>>> String isDomainGroup = user.getAttribute("IsDomainGro >>>>>> up"); >>>>>> if (isDomainGroup != null && >>>>>> isDomainGroup.equals("True")) >>>>>> { >>>>>> // Add a user token for the domain group >>>>>> rval.add("U"+user.getAttribute("LoginName")); >>>>>> } >>>>>> } >>>>>> } >>>>>> } >>>>>> } >>>>>> } >>>>>> else >>>>>> { >>>>>> while (rolesIter.hasNext()) >>>>>> { >>>>>> MessageElement child = (MessageElement)rolesIter.next(); >>>>>> if (child.getElementName().getLocalName().equals("Users")) >>>>>> { >>>>>> Iterator usersIterator = child.getChildElements(); >>>>>> while (usersIterator.hasNext()) >>>>>> { >>>>>> MessageElement user = (MessageElement)usersIterator. >>>>>> next(); >>>>>> if (user.getElementName().getLocalName().equals("User")) >>>>>> { >>>>>> rval.add(user.getAttribute("Sid")); >>>>>> } >>>>>> } >>>>>> } >>>>>> } >>>>>> } >>>>>> return rval; >>>>>> } >>>>>> >>>>>> <<<<<< >>>>>> >>>>>> So what happens there depends on what you've selected for the >>>>>> connection's "use Active Directory authority" selection. What have you >>>>>> chosen? >>>>>> >>>>>> Karl >>>>>> >>>>>> On Wed, Dec 28, 2016 at 5:35 AM, Cihad Guzel <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hi Karl, >>>>>>> >>>>>>> 1- Yes, I selected Sharepoint 2013, >>>>>>> 2- Yes, I installed the plugin in my Sharepoint server. >>>>>>> >>>>>>> 2016-12-28 2:54 GMT+03:00 Karl Wright <[email protected]>: >>>>>>> >>>>>>>> Hi Cihad, >>>>>>>> >>>>>>>> Some questions: >>>>>>>> (1) Have you selected "SharePoint 2013" in your SharePoint >>>>>>>> connection? >>>>>>>> (2) Have you installed the ManifoldCF SharePoint 2013 plugin on >>>>>>>> your SharePoint server? >>>>>>>> >>>>>>>> You will need to do both of these in order for SharePoint 2013 ACLs >>>>>>>> to work right. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Karl >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Dec 27, 2016 at 3:01 PM, Cihad Guzel <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I am trying MFC with Sharepoint 2013. First, I install the >>>>>>>>> sharepoint plugin and then run my job. My files in sharepoint are >>>>>>>>> indexed >>>>>>>>> successfully to Solr. But I don't see the ACLs in solr index. You can >>>>>>>>> see >>>>>>>>> my sample solr data as follow: >>>>>>>>> >>>>>>>>> "filename":"Sample.doc", >>>>>>>>> "allow_token_document":["Authority+Group:"], "deny_token_document >>>>>>>>> ":["Authority+Group:DEAD_AUTHORITY"], "deny_token_parent":[ >>>>>>>>> "__nosecurity__"], "allow_token_share":["__nosecurity__"], " >>>>>>>>> allow_token_parent":["__nosecurity__"], "deny_token_share":[ >>>>>>>>> "__nosecurity__"], >>>>>>>>> >>>>>>>>> I run Sharepoint connector with debug mode. I follow Manifoldcf >>>>>>>>> log but I don't see any error in it. I can see "getDocumentACLs xml >>>>>>>>> response:" in the log as follow: >>>>>>>>> >>>>>>>>> <ns1:GetPermissionCollection ><ns1:Permissions> >>>>>>>>> ... >>>>>>>>> <ns1:Permission MemberID="3" Mask="-1" MemberIsUser="False" >>>>>>>>> MemberGlobal="True" GroupName="testsite Owners"/> >>>>>>>>> ... >>>>>>>>> </ns1:Permissions> >>>>>>>>> </ns1:GetPermissionCollection> >>>>>>>>> >>>>>>>>> How do I follow a way to solve the problem? >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Regards >>>>>>>>> Cihad Güzel >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Teşekkürler >>>>>>> Cihad Güzel >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Teşekkürler >>>>> Cihad Güzel >>>>> >>>> >>>> >>> >>> >>> -- >>> Teşekkürler >>> Cihad Güzel >>> >> >> > -- Teşekkürler Cihad Güzel
