You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by sh...@apache.org on 2014/02/20 03:38:34 UTC

svn commit: r1570054 - in /manifoldcf/trunk: ./ connectors/elasticsearch/connector/src/main/java/org/apache/manifoldcf/agents/output/elasticsearch/ connectors/elasticsearch/connector/src/main/native2ascii/org/apache/manifoldcf/agents/output/elasticsear...

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") + "&nbsp;\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())
           {