From 411f30e5407cba4c5a045c5a5613966e01fe0a63 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 29 Aug 2014 08:20:20 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog
---
opendj-sdk/opends/src/server/org/opends/server/backends/ChangelogBackend.java | 45 +++++++++++++++++++++++++++++++--------------
1 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/ChangelogBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/ChangelogBackend.java
index 1a1ec5c..0f0da2a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/ChangelogBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/ChangelogBackend.java
@@ -389,20 +389,9 @@
@Override
public void search(final SearchOperation searchOperation) throws DirectoryException
{
- final Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
- excludedDomains.add(DN_EXTERNAL_CHANGELOG_ROOT);
- SearchParams params = new SearchParams(searchOperation.toString(), excludedDomains);
- final ExternalChangelogRequestControl eclRequestControl =
- searchOperation.getRequestControl(ExternalChangelogRequestControl.DECODER);
- if (eclRequestControl == null)
- {
- params.requestType = REQUEST_TYPE_FROM_CHANGE_NUMBER;
- }
- else
- {
- params.requestType = REQUEST_TYPE_FROM_COOKIE;
- params.multiDomainServerState = eclRequestControl.getCookie();
- }
+ checkChangelogReadPrivilege(searchOperation);
+
+ final SearchParams params = buildSearchParameters(searchOperation);
optimizeSearchParameters(params, searchOperation.getBaseDN(), searchOperation.getFilter());
try
@@ -418,6 +407,25 @@
}
}
+ private SearchParams buildSearchParameters(final SearchOperation searchOperation) throws DirectoryException
+ {
+ final Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
+ excludedDomains.add(DN_EXTERNAL_CHANGELOG_ROOT);
+ final SearchParams params = new SearchParams(searchOperation.toString(), excludedDomains);
+ final ExternalChangelogRequestControl eclRequestControl =
+ searchOperation.getRequestControl(ExternalChangelogRequestControl.DECODER);
+ if (eclRequestControl == null)
+ {
+ params.requestType = REQUEST_TYPE_FROM_CHANGE_NUMBER;
+ }
+ else
+ {
+ params.requestType = REQUEST_TYPE_FROM_COOKIE;
+ params.multiDomainServerState = eclRequestControl.getCookie();
+ }
+ return params;
+ }
+
/** {@inheritDoc} */
@Override
public Set<String> getSupportedControls()
@@ -1198,6 +1206,15 @@
+ entryDN + "\" into an External Change Log entry: " + exception.getMessage()));
}
+ private void checkChangelogReadPrivilege(SearchOperation searchOp) throws DirectoryException
+ {
+ if (!searchOp.getClientConnection().hasPrivilege(Privilege.CHANGELOG_READ, searchOp))
+ {
+ throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
+ NOTE_SEARCH_CHANGELOG_INSUFFICIENT_PRIVILEGES.get());
+ }
+ }
+
/**
* Create a changelog entry from a set of provided information. This is the part of
* entry creation common to all types of msgs (ADD, DEL, MOD, MODDN).
--
Gitblit v1.10.0