Author: shinichiro
Date: Thu Feb 20 02:38:33 2014
New Revision: 1570054
URL: http://svn.apache.org/r1570054
Log:
Fix for CONNECTORS-886
Modified:
manifoldcf/trunk/CHANGES.txt
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ElasticSearchIndex.java
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsearch/common_ja_JP.properties
manifoldcf/trunk/connectors/jcifs/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_en_US.properties
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_ja_JP.properties
manifoldcf/trunk/connectors/solr/connector/src/main/java/org/apache/manifoldcf/agents/output/solr/HttpPoster.java
Modified: manifoldcf/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/CHANGES.txt?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
--- manifoldcf/trunk/CHANGES.txt (original)
+++ manifoldcf/trunk/CHANGES.txt Thu Feb 20 02:38:33 2014
@@ -3,6 +3,10 @@ $Id$
======================= 1.6-dev =====================
+CONNECTORS-886: Add support for Parent folder security
+in SharedDriveConnector.
+(Shinichiro Abe)
+
CONNECTORS-893: Update end-user documentation to describe view
pages and the buttons that are found on them.
(Karl Wright)
Modified:
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ElasticSearchIndex.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ElasticSearchIndex.java?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ElasticSearchIndex.java
(original)
+++
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ElasticSearchIndex.java
Thu Feb 20 02:38:33 2014
@@ -112,6 +112,14 @@ public class ElasticSearchIndex extends
needComma = writeACLs(pw, needComma, "document", document.getACL(),
document.getDenyACL());
needComma = writeACLs(pw, needComma, "share", document.getShareACL(),
document.getShareDenyACL());
+ int directoryCount = document.countDirectoryACLs();
+ int q = 0;
+ while (q < directoryCount)
+ {
+ needComma = writeACLs(pw, needComma, "directory_" + q,
document.getDirectoryACL(q), document.getDirectoryDenyACL(q));
+ q++;
+ }
+
if(inputStream!=null){
if(needComma){
pw.print(",");
@@ -166,11 +174,26 @@ public class ElasticSearchIndex extends
{
if (fieldValues == null)
return needComma;
- for(int j=0; j<fieldValues.length; j++){
+
+ if (fieldValues.length == 1){
+ if (needComma)
+ pw.print(",");
+ pw.print(jsonStringEscape(fieldName)+" :
"+jsonStringEscape(fieldValues[0]));
+ needComma = true;
+ return needComma;
+ }
+
+ if (fieldValues.length > 1){
if (needComma)
pw.print(",");
- String fieldValue = fieldValues[j];
- pw.print(jsonStringEscape(fieldName)+" : "+jsonStringEscape(fieldValue));
+ StringBuilder sb = new StringBuilder();
+ sb.append("[");
+ for(int j=0; j<fieldValues.length; j++){
+ sb.append(jsonStringEscape(fieldValues[j])).append(",");
+ }
+ sb.setLength(sb.length() - 1); // discard last ","
+ sb.append("]");
+ pw.print(jsonStringEscape(fieldName)+" : "+sb.toString());
needComma = true;
}
return needComma;
Modified:
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsearch/common_ja_JP.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsearch/common_ja_JP.properties?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsearch/common_ja_JP.properties
(original)
+++
manifoldcf/trunk/connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsearch/common_ja_JP.properties
Thu Feb 20 02:38:33 2014
@@ -17,12 +17,12 @@ ElasticSearchConnector.Parameters=å¼
ElasticSearchConnector.ServerLocation=ãµã¼ã
ElasticSearchConnector.URLColon=(URL):
-ElasticSearchConnector.IndexNameColon=ç´¢å¼åï¼
-ElasticSearchConnector.IndexTypeColon=ç´¢å¼åï¼
+ElasticSearchConnector.IndexNameColon=ã¤ã³ããã¯ã¹åï¼
+ElasticSearchConnector.IndexTypeColon=ã¿ã¤ãåï¼
ElasticSearchConnector.PleaseSupplyValidElasticSearchLocation=æ£ããElasticSearchãµã¼ãURLãå
¥åãã¦ãã ãã
-ElasticSearchConnector.PleaseSupplyValidIndexName=æ£ããç´¢å¼åãå
¥åãã¦ãã ãã
-ElasticSearchConnector.PleaseSupplyValidIndexType=æ£ããç´¢å¼åãå
¥åãã¦ãã ãã
+ElasticSearchConnector.PleaseSupplyValidIndexName=æ£ããã¤ã³ããã¯ã¹åãå
¥åãã¦ãã ãã
+ElasticSearchConnector.PleaseSupplyValidIndexType=æ£ããã¿ã¤ãåãå
¥åãã¦ãã ãã
ElasticSearchConnector.ElasticSearch=ElasticSearch
Modified:
manifoldcf/trunk/connectors/jcifs/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jcifs/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/jcifs/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java
(original)
+++
manifoldcf/trunk/connectors/jcifs/connector/src/main/java/org/apache/manifoldcf/crawler/connectors/sharedrive/SharedDriveConnector.java
Thu Feb 20 02:38:33 2014
@@ -85,6 +85,8 @@ public class SharedDriveConnector extend
public static final String NODE_URIMAP = "urimap";
public static final String NODE_SHAREACCESS = "shareaccess";
public static final String NODE_SHARESECURITY = "sharesecurity";
+ public static final String NODE_PARENTFOLDERACCESS = "parentfolderaccess";
+ public static final String NODE_PARENTFOLDERSECURITY =
"parentfoldersecurity";
public static final String NODE_MAXLENGTH = "maxlength";
public static final String NODE_ACCESS = "access";
public static final String NODE_SECURITY = "security";
@@ -489,7 +491,8 @@ public class SharedDriveConnector extend
// the version string completely.
String[] acls = getForcedAcls(spec);
String[] shareAcls = getForcedShareAcls(spec);
-
+ String[] parentFolderAcls = getForcedParentFolderAcls(spec);
+
String pathAttributeName = null;
MatchMap matchMap = new MatchMap();
MatchMap fileMap = new MatchMap();
@@ -562,8 +565,11 @@ public class SharedDriveConnector extend
StringBuilder sb = new StringBuilder();
+ // The SmbFile for parentFolder acls.
+ SmbFile parentFolder = new SmbFile(file.getParent(),pa);
+
// Parseable stuff goes first. There's no metadata for jcifs, so
this will just be the acls
- describeDocumentSecurity(sb,file,acls,shareAcls);
+
describeDocumentSecurity(sb,file,parentFolder,acls,shareAcls,parentFolderAcls);
// Include the path attribute name and value in the parseable area.
if (pathAttributeName != null)
@@ -1041,12 +1047,15 @@ public class SharedDriveConnector extend
/** This method calculates an ACL string based on whether there are forced
acls and also based on
* the acls in place for a file.
*/
- protected void describeDocumentSecurity(StringBuilder description, SmbFile
file, String[] forcedacls,
- String[] forcedShareAcls)
+ protected void describeDocumentSecurity(StringBuilder description,
+ SmbFile file, SmbFile parentFolder,
+ String[] forcedacls, String[] forcedShareAcls, String[]
forcedParentFolderAcls)
throws ManifoldCFException, IOException
{
String[] shareAllowAcls;
String[] shareDenyAcls;
+ String[] parentAllowAcls;
+ String[] parentDenyAcls;
String[] allowAcls;
String[] denyAcls;
@@ -1139,6 +1148,79 @@ public class SharedDriveConnector extend
else
description.append('-');
+ if (forcedParentFolderAcls!=null)
+ {
+ description.append("+");
+
+ if (forcedParentFolderAcls.length==0)
+ {
+ aces = getFileSecurity(parentFolder, useSIDs);
+ if (aces == null)
+ {
+ if (Logging.connectors.isDebugEnabled())
+ Logging.connectors.debug("JCIFS: Parent folder has no ACL for
'"+getFileCanonicalPath(parentFolder)+"'");
+
+ // Parent folder is "public", meaning we want S-1-1-0 and the deny
token
+ parentAllowAcls = new String[]{"S-1-1-0"};
+ parentDenyAcls = new String[]{defaultAuthorityDenyToken};
+ }
+ else
+ {
+ if (Logging.connectors.isDebugEnabled())
+ Logging.connectors.debug("JCIFS: Found
"+Integer.toString(aces.length)+" parent folder access tokens for
'"+getFileCanonicalPath(parentFolder)+"'");
+
+ // We are interested in the read permission, and take
+ // a keen interest in allow/deny
+ allowCount = 0;
+ denyCount = 0;
+ j = 0;
+ while (j < aces.length)
+ {
+ ACE ace = aces[j++];
+ if ((ace.getAccessMask() & ACE.FILE_READ_DATA) != 0)
+ {
+ if (ace.isAllow())
+ allowCount++;
+ else
+ denyCount++;
+ }
+ }
+
+ parentAllowAcls = new String[allowCount];
+ parentDenyAcls = new String[denyCount+1];
+ j = 0;
+ allowCount = 0;
+ denyCount = 0;
+ parentDenyAcls[denyCount++] = defaultAuthorityDenyToken;
+ while (j < aces.length)
+ {
+ ACE ace = aces[j++];
+ if ((ace.getAccessMask() & ACE.FILE_READ_DATA) != 0)
+ {
+ if (ace.isAllow())
+ parentAllowAcls[allowCount++] = useSIDs ?
ace.getSID().toString() : ace.getSID().getAccountName();
+ else
+ parentDenyAcls[denyCount++] = useSIDs ?
ace.getSID().toString() : ace.getSID().getAccountName();
+ }
+ }
+ }
+ }
+ else
+ {
+ parentAllowAcls = forcedParentFolderAcls;
+ if (forcedParentFolderAcls.length == 0)
+ parentDenyAcls = new String[0];
+ else
+ parentDenyAcls = new String[]{defaultAuthorityDenyToken};
+ }
+ java.util.Arrays.sort(parentAllowAcls);
+ java.util.Arrays.sort(parentDenyAcls);
+ packList(description,parentAllowAcls,'+');
+ packList(description,parentDenyAcls,'+');
+ }
+ else
+ description.append('-');
+
if (forcedacls!=null)
{
description.append("+");
@@ -1320,6 +1402,31 @@ public class SharedDriveConnector extend
}
if (startPosition < version.length() && version.charAt(startPosition++) ==
'+')
{
+ // Unpack parent allow and deny acls
+ ArrayList parentAllowAcls = new ArrayList();
+ startPosition = unpackList(parentAllowAcls,version,startPosition,'+');
+ ArrayList parentDenyAcls = new ArrayList();
+ startPosition = unpackList(parentDenyAcls,version,startPosition,'+');
+ String[] parentAllow = new String[parentAllowAcls.size()];
+ String[] parentDeny = new String[parentDenyAcls.size()];
+ int i = 0;
+ while (i < parentAllow.length)
+ {
+ parentAllow[i] = (String)parentAllowAcls.get(i);
+ i++;
+ }
+ i = 0;
+ while (i < parentDeny.length)
+ {
+ parentDeny[i] = (String)parentDenyAcls.get(i);
+ i++;
+ }
+
+ // set parent folder acls
+ rd.addDirectoryACLs(parentAllow, parentDeny);
+ }
+ if (startPosition < version.length() && version.charAt(startPosition++) ==
'+')
+ {
// Unpack allow and deny acls
ArrayList allowAcls = new ArrayList();
startPosition = unpackList(allowAcls,version,startPosition,'+');
@@ -2111,6 +2218,44 @@ public class SharedDriveConnector extend
return rval;
}
+ /** Grab forced parent folder acls out of document specification.
+ *@param spec is the document specification.
+ *@return the acls.
+ */
+ protected static String[] getForcedParentFolderAcls(DocumentSpecification
spec)
+ {
+ HashMap map = new HashMap();
+ int i = 0;
+ boolean securityOn = false;
+ while (i < spec.getChildCount())
+ {
+ SpecificationNode sn = spec.getChild(i++);
+ if (sn.getType().equals(NODE_PARENTFOLDERACCESS))
+ {
+ String token = sn.getAttributeValue(ATTRIBUTE_TOKEN);
+ map.put(token,token);
+ }
+ else if (sn.getType().equals(NODE_PARENTFOLDERSECURITY))
+ {
+ String value = sn.getAttributeValue(ATTRIBUTE_VALUE);
+ if (value.equals("on"))
+ securityOn = true;
+ else if (value.equals("off"))
+ securityOn = false;
+ }
+ }
+ if (!securityOn)
+ return null;
+ String[] rval = new String[map.size()];
+ Iterator iter = map.keySet().iterator();
+ i = 0;
+ while (iter.hasNext())
+ {
+ rval[i++] = (String)iter.next();
+ }
+ return rval;
+ }
+
/** Map a "path" specification to a full identifier.
*/
protected String mapToIdentifier(String path)
@@ -3281,6 +3426,7 @@ public class SharedDriveConnector extend
i = 0;
boolean securityOn = true;
boolean shareSecurityOn = true;
+ boolean parentFolderSecurityOn = false;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i++);
@@ -3300,6 +3446,14 @@ public class SharedDriveConnector extend
else if (securityValue.equals("on"))
shareSecurityOn = true;
}
+ if
(sn.getType().equals(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.NODE_PARENTFOLDERSECURITY))
+ {
+ String securityValue =
sn.getAttributeValue(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.ATTRIBUTE_VALUE);
+ if (securityValue.equals("off"))
+ parentFolderSecurityOn = false;
+ else if (securityValue.equals("on"))
+ parentFolderSecurityOn = true;
+ }
}
if
(tabName.equals(Messages.getString(locale,"SharedDriveConnector.Security")))
@@ -3384,6 +3538,18 @@ public class SharedDriveConnector extend
" </td>\n"+
" </tr>\n"+
"\n"+
+" <tr><td class=\"separator\" colspan=\"4\"><hr/></td></tr>\n"+
+"\n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>" +
Messages.getBodyString(locale,"SharedDriveConnector.ParentFolderSecurity") +
"</nobr></td>\n"+
+" <td colspan=\"3\" class=\"value\">\n"+
+" <nobr>\n"+
+" <input type=\"radio\" name=\"specparentfoldersecurity\" value=\"on\"
"+(parentFolderSecurityOn?"checked=\"true\"":"")+" />" +
Messages.getBodyString(locale,"SharedDriveConnector.Enabled") + " \n"+
+" <input type=\"radio\" name=\"specparentfoldersecurity\" value=\"off\"
"+((parentFolderSecurityOn==false)?"checked=\"true\"":"")+" />" +
Messages.getBodyString(locale,"SharedDriveConnector.Disabled") + "\n"+
+" </nobr>\n"+
+" </td>\n"+
+" </tr>\n"+
+"\n"+
"</table>\n"
);
}
@@ -3410,8 +3576,9 @@ public class SharedDriveConnector extend
}
out.print(
"<input type=\"hidden\" name=\"tokencount\"
value=\""+Integer.toString(k)+"\"/>\n"+
-"<input type=\"hidden\" name=\"specsharesecurity\"
value=\""+(shareSecurityOn?"on":"off")+"\"/>\n"
- );
+"<input type=\"hidden\" name=\"specsharesecurity\"
value=\""+(shareSecurityOn?"on":"off")+"\"/>\n"+
+"<input type=\"hidden\" name=\"specparentfoldersecurity\"
value=\""+(parentFolderSecurityOn?"on":"off")+"\"/>\n"
+ );
}
@@ -4000,6 +4167,26 @@ public class SharedDriveConnector extend
}
+ x = variableContext.getParameter("specparentfoldersecurity");
+ if (x != null)
+ {
+ // Delete all security entries first
+ int i = 0;
+ while (i < ds.getChildCount())
+ {
+ SpecificationNode sn = ds.getChild(i);
+ if
(sn.getType().equals(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.NODE_PARENTFOLDERSECURITY))
+ ds.removeChild(i);
+ else
+ i++;
+ }
+
+ SpecificationNode node = new
SpecificationNode(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.NODE_PARENTFOLDERSECURITY);
+
node.setAttribute(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.ATTRIBUTE_VALUE,x);
+ ds.addChild(ds.getChildCount(),node);
+
+ }
+
String xc = variableContext.getParameter("specpathnameattribute");
if (xc != null)
{
@@ -4264,6 +4451,7 @@ public class SharedDriveConnector extend
i = 0;
boolean securityOn = true;
boolean shareSecurityOn = true;
+ boolean parentFolderSecurityOn = false;
while (i < ds.getChildCount())
{
SpecificationNode sn = ds.getChild(i++);
@@ -4283,6 +4471,14 @@ public class SharedDriveConnector extend
else if (securityValue.equals("on"))
shareSecurityOn = true;
}
+ if
(sn.getType().equals(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.NODE_PARENTFOLDERSECURITY))
+ {
+ String securityValue =
sn.getAttributeValue(org.apache.manifoldcf.crawler.connectors.sharedrive.SharedDriveConnector.ATTRIBUTE_VALUE);
+ if (securityValue.equals("off"))
+ parentFolderSecurityOn = false;
+ else if (securityValue.equals("on"))
+ parentFolderSecurityOn = true;
+ }
}
out.print(
"\n"+
@@ -4337,6 +4533,13 @@ public class SharedDriveConnector extend
" <td
class=\"value\"><nobr>"+(shareSecurityOn?Messages.getBodyString(locale,"SharedDriveConnector.Enabled"):Messages.getBodyString(locale,"SharedDriveConnector.Disabled"))+"</nobr></td>\n"+
" </tr>\n"+
"\n"+
+" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"+
+" \n"+
+" <tr>\n"+
+" <td class=\"description\"><nobr>" +
Messages.getBodyString(locale,"SharedDriveConnector.ParentFolderSecurity") +
"</nobr></td>\n"+
+" <td
class=\"value\"><nobr>"+(parentFolderSecurityOn?Messages.getBodyString(locale,"SharedDriveConnector.Enabled"):Messages.getBodyString(locale,"SharedDriveConnector.Disabled"))+"</nobr></td>\n"+
+" </tr>\n"+
+"\n"+
" <tr><td class=\"separator\" colspan=\"2\"><hr/></td></tr>\n"
);
// Find the path-name metadata attribute name
Modified:
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_en_US.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_en_US.properties?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_en_US.properties
(original)
+++
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_en_US.properties
Thu Feb 20 02:38:33 2014
@@ -71,6 +71,7 @@ SharedDriveConnector.DeleteToken=Delete
SharedDriveConnector.NoFileAccessTokensPresent=No file access tokens present
SharedDriveConnector.AddToken=Add token
SharedDriveConnector.ShareSecurity=Share security:
+SharedDriveConnector.ParentFolderSecurity=Parent folder security:
SharedDriveConnector.PathAttributeName=Path attribute name:
SharedDriveConnector.DeleteMapping=Delete mapping #
SharedDriveConnector.NoMappingsSpecified=No mappings specified
Modified:
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_ja_JP.properties
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_ja_JP.properties?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_ja_JP.properties
(original)
+++
manifoldcf/trunk/connectors/jcifs/connector/src/main/native2ascii/org/apache/manifoldcf/crawler/connectors/sharedrive/common_ja_JP.properties
Thu Feb 20 02:38:33 2014
@@ -70,6 +70,7 @@ SharedDriveConnector.DeleteToken=ã�
SharedDriveConnector.NoFileAccessTokensPresent=ãã¡ã¤ã«ã¢ã¯ã»ã¹ãã¼ã¯ã³ãå®ç¾©ããã¦ãã¾ãã
SharedDriveConnector.AddToken=ãã¼ã¯ã³ã追å
SharedDriveConnector.ShareSecurity=å
±æã»ãã¥ãªãã£ï¼
+SharedDriveConnector.ParentFolderSecurity=親ãã©ã«ãã»ãã¥ãªãã£ï¼
SharedDriveConnector.PathAttributeName=ãã¹å±æ§åï¼
SharedDriveConnector.DeleteMapping=ããããåé¤ï¼ #
SharedDriveConnector.NoMappingsSpecified=ããããæå®ããã¦ãã¾ãã
@@ -85,7 +86,7 @@ SharedDriveConnector.AddToURLMappings=UR
SharedDriveConnector.NoDocumentsSpecified=ã³ã³ãã³ããæå®ããã¦ãã¾ãã
SharedDriveConnector.FileSecurity=ãã¡ã¤ã«ã»ãã¥ãªãã£ï¼
SharedDriveConnector.FileAccessTokens=ãã¡ã¤ã«ã¢ã¯ã»ã¹ãã¼ã¯ã³ï¼
-SharedDriveConnector.NoFileAccessTokensSpecified=ãã¡ã¤ã«ã¢ã¯ã»ã¹ãã¼ã¯ãæå®ããã¦ãã¾ãã
+SharedDriveConnector.NoFileAccessTokensSpecified=ãã¡ã¤ã«ã¢ã¯ã»ã¹ãã¼ã¯ã³ãæå®ããã¦ãã¾ãã
SharedDriveConnector.ShareSecurity=å
±æã»ãã¥ãªãã£ï¼
SharedDriveConnector.PathNameMetadataAttribute=ãã¹ã¼åã¡ã¿ãã¼ã¿å±æ§ï¼
SharedDriveConnector.NoPathNameMetadataAttributeSpecified=path-nameã¡ã¿ãã¼ã¿å±æ§ãæå®ããã¦ãã¾ãã
Modified:
manifoldcf/trunk/connectors/solr/connector/src/main/java/org/apache/manifoldcf/agents/output/solr/HttpPoster.java
URL:
http://svn.apache.org/viewvc/manifoldcf/trunk/connectors/solr/connector/src/main/java/org/apache/manifoldcf/agents/output/solr/HttpPoster.java?rev=1570054&r1=1570053&r2=1570054&view=diff
==============================================================================
---
manifoldcf/trunk/connectors/solr/connector/src/main/java/org/apache/manifoldcf/agents/output/solr/HttpPoster.java
(original)
+++
manifoldcf/trunk/connectors/solr/connector/src/main/java/org/apache/manifoldcf/agents/output/solr/HttpPoster.java
Thu Feb 20 02:38:33 2014
@@ -514,10 +514,6 @@ public class HttpPoster
if (Logging.ingest.isDebugEnabled())
Logging.ingest.debug("indexPost(): '" + documentURI + "'");
- // The SOLR connector cannot deal with folder-level security at this time.
If they are seen, reject the document.
- if (document.countDirectoryACLs() != 0)
- return false;
-
// If the document is too long, reject it.
if (maxDocumentLength != null && document.getBinaryLength() >
maxDocumentLength.longValue())
return false;
@@ -527,10 +523,24 @@ public class HttpPoster
String[] shareDenyAcls =
convertACL(document.getShareDenyACL(),authorityNameString,activities);
String[] acls =
convertACL(document.getACL(),authorityNameString,activities);
String[] denyAcls =
convertACL(document.getDenyACL(),authorityNameString,activities);
-
+
+ Map<Integer,String[]> directoryAclsMap = new HashMap<Integer,String[]>();
+ Map<Integer,String[]> directoryDenyAclsMap = new
HashMap<Integer,String[]>();
+ int directoryCount = document.countDirectoryACLs();
+ int q = 0;
+ while (q < directoryCount)
+ {
+ String[] directoryAcls =
convertACL(document.getDirectoryACL(q),authorityNameString,activities);
+ String[] directoryDenyAcls =
convertACL(document.getDirectoryDenyACL(q),authorityNameString,activities);
+ directoryAclsMap.put(Integer.valueOf(q), directoryAcls);
+ directoryDenyAclsMap.put(Integer.valueOf(q), directoryDenyAcls);
+ q++;
+ }
+
try
{
- IngestThread t = new
IngestThread(documentURI,document,arguments,keepAllMetadata,sourceTargets,shareAcls,shareDenyAcls,acls,denyAcls,commitWithin);
+ IngestThread t = new
IngestThread(documentURI,document,arguments,keepAllMetadata,sourceTargets,
+
shareAcls,shareDenyAcls,directoryAclsMap,directoryDenyAclsMap,acls,denyAcls,commitWithin);
try
{
t.start();
@@ -810,6 +820,8 @@ public class HttpPoster
protected final Map<String,List<String>> sourceTargets;
protected final String[] shareAcls;
protected final String[] shareDenyAcls;
+ protected final Map<Integer,String[]> directoryAclsMap;
+ protected final Map<Integer,String[]> directoryDenyAclsMap;
protected final String[] acls;
protected final String[] denyAcls;
protected final String commitWithin;
@@ -825,7 +837,7 @@ public class HttpPoster
public IngestThread(String documentURI, RepositoryDocument document,
Map<String, List<String>> arguments, boolean keepAllMetadata,
Map<String, List<String>> sourceTargets,
- String[] shareAcls, String[] shareDenyAcls, String[] acls, String[]
denyAcls, String commitWithin)
+ String[] shareAcls, String[] shareDenyAcls, Map<Integer,String[]>
directoryAclsMap, Map<Integer,String[]> directoryDenyAclsMap, String[] acls,
String[] denyAcls, String commitWithin)
{
super();
setDaemon(true);
@@ -834,6 +846,8 @@ public class HttpPoster
this.arguments = arguments;
this.shareAcls = shareAcls;
this.shareDenyAcls = shareDenyAcls;
+ this.directoryAclsMap = directoryAclsMap;
+ this.directoryDenyAclsMap = directoryDenyAclsMap;
this.acls = acls;
this.denyAcls = denyAcls;
this.sourceTargets = sourceTargets;
@@ -901,6 +915,17 @@ public class HttpPoster
writeACLs(out,"share",shareAcls,shareDenyAcls);
writeACLs(out,"document",acls,denyAcls);
+ int directoryCount = directoryAclsMap.size();
+ int q = 0;
+ while (q < directoryCount)
+ {
+ Integer index = Integer.valueOf(q);
+ String[] directoryAcls = directoryAclsMap.get(index);
+ String[] directoryDenyAcls = directoryDenyAclsMap.get(index);
+
writeACLs(out,"directory_"+index.toString(),directoryAcls,directoryDenyAcls);
+ q++;
+ }
+
// Write the arguments
for (String name : arguments.keySet())
{