Fix ACL fragments when Doc-Controls is enabled
diff --git a/src/com/google/enterprise/adaptor/DocumentHandler.java b/src/com/google/enterprise/adaptor/DocumentHandler.java
index c18dd88..04ba831 100644
--- a/src/com/google/enterprise/adaptor/DocumentHandler.java
+++ b/src/com/google/enterprise/adaptor/DocumentHandler.java
@@ -360,6 +360,14 @@
}
if (null != acl.getInheritFrom()) {
URI from = enc.encodeDocId(acl.getInheritFrom());
+ try {
+ // Although it is named "fragment", we use a query parameter because the
+ // GSA "normalizes" away fragments.
+ from = new URI(from.getScheme(), from.getAuthority(), from.getPath(),
+ acl.getInheritFromFragment(), null);
+ } catch (URISyntaxException ex) {
+ throw new AssertionError(ex);
+ }
gsaAcl.put("inherit_from", "" + from);
}
if (acl.getInheritanceType() != Acl.InheritanceType.LEAF_NODE) {
diff --git a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
index 7ed5d4d..e33ec08 100644
--- a/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
+++ b/test/com/google/enterprise/adaptor/DocumentHandlerTest.java
@@ -902,6 +902,15 @@
}
@Test
+ public void testFormNamespacedAclHeaderFragment() {
+ DocIdEncoder enc = new MockDocIdCodec();
+ String golden = "{\"inherit_from\":\"http:\\/\\/localhost\\/t?f?=$%25\"}";
+ String aclHeader = DocumentHandler.formNamespacedAclHeader(new Acl.Builder()
+ .setInheritFrom(new DocId("t"), "f?=$%").build(), enc);
+ assertEquals(golden, aclHeader);
+ }
+
+ @Test
public void testFormNamespacedAclHeaderBusy() {
DocIdEncoder enc = new MockDocIdCodec();
String golden = "{"