You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2019/03/11 12:13:33 UTC
svn commit: r1855221 - in /jackrabbit/oak/trunk/oak-store-document/src:
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java
Author: mreutegg
Date: Mon Mar 11 12:13:33 2019
New Revision: 1855221
URL: http://svn.apache.org/viewvc?rev=1855221&view=rev
Log:
OAK-8122: MongoDocumentStore init may fail with authentication
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java?rev=1855221&r1=1855220&r2=1855221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatus.java Mon Mar 11 12:13:33 2019
@@ -245,6 +245,11 @@ public class MongoStatus implements Serv
// OAK-7485: workaround when running on
// MongoDB Atlas shared instances
serverStatus = new BasicDBObject();
+ } else if (e.getErrorCode() == 13) {
+ // "Unauthorized"
+ // User is not authorized to run the
+ // serverStatus command (OAK-8122).
+ serverStatus = new BasicDBObject();
} else {
throw e;
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java?rev=1855221&r1=1855220&r2=1855221&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoStatusTest.java Mon Mar 11 12:13:33 2019
@@ -16,9 +16,25 @@
*/
package org.apache.jackrabbit.oak.plugins.document.mongo;
+import java.util.concurrent.atomic.AtomicReference;
+
import com.mongodb.BasicDBObject;
+import com.mongodb.MongoCommandException;
+import com.mongodb.ReadPreference;
+import com.mongodb.ServerAddress;
+import com.mongodb.client.ClientSession;
+import com.mongodb.client.MongoDatabase;
+
import org.apache.jackrabbit.oak.plugins.document.MongoConnectionFactory;
+import org.apache.jackrabbit.oak.plugins.document.MongoUtils;
import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
+import org.bson.BsonDocument;
+import org.bson.BsonDouble;
+import org.bson.BsonInt32;
+import org.bson.BsonString;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
@@ -109,4 +125,92 @@ public class MongoStatusTest {
}
}
}
+
+ @Test
+ public void unauthorized() {
+ MongoTestClient testClient = new MongoTestClient(MongoUtils.URL) {
+
+ private final AtomicReference<String> noException = new AtomicReference<>();
+
+ @Override
+ public @NotNull MongoDatabase getDatabase(String databaseName) {
+ return new MongoTestDatabase(super.getDatabase(databaseName),
+ noException, noException, noException) {
+ @Override
+ public @NotNull Document runCommand(@NotNull Bson command) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(command);
+ }
+
+ @Override
+ public @NotNull Document runCommand(@NotNull Bson command,
+ @NotNull ReadPreference readPreference) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(command, readPreference);
+ }
+
+ @Override
+ public <TResult> @NotNull TResult runCommand(@NotNull Bson command,
+ @NotNull Class<TResult> tResultClass) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(command, tResultClass);
+ }
+
+ @Override
+ public <TResult> @NotNull TResult runCommand(@NotNull Bson command,
+ @NotNull ReadPreference readPreference,
+ @NotNull Class<TResult> tResultClass) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(command, readPreference, tResultClass);
+ }
+
+ @Override
+ public @NotNull Document runCommand(@NotNull ClientSession clientSession,
+ @NotNull Bson command) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(clientSession, command);
+ }
+
+ @Override
+ public @NotNull Document runCommand(@NotNull ClientSession clientSession,
+ @NotNull Bson command,
+ @NotNull ReadPreference readPreference) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(clientSession, command, readPreference);
+ }
+
+ @Override
+ public <TResult> @NotNull TResult runCommand(@NotNull ClientSession clientSession,
+ @NotNull Bson command,
+ @NotNull Class<TResult> tResultClass) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(clientSession, command, tResultClass);
+ }
+
+ @Override
+ public <TResult> @NotNull TResult runCommand(@NotNull ClientSession clientSession,
+ @NotNull Bson command,
+ @NotNull ReadPreference readPreference,
+ @NotNull Class<TResult> tResultClass) {
+ unauthorizedIfServerStatus(command);
+ return super.runCommand(clientSession, command, readPreference, tResultClass);
+ }
+ };
+ }
+
+ private void unauthorizedIfServerStatus(Bson command) {
+ if (command.toBsonDocument(BasicDBObject.class, getDefaultCodecRegistry()).containsKey("serverStatus")) {
+ BsonDocument response = new BsonDocument("ok", new BsonDouble(0.0));
+ response.put("errmsg", new BsonString("command serverStatus requires authentication"));
+ response.put("code", new BsonInt32(13));
+ response.put("codeName", new BsonString("Unauthorized"));
+ ServerAddress address = getAddress();
+ assertNotNull(address);
+ throw new MongoCommandException(response, address);
+ }
+ }
+ };
+ MongoStatus status = new MongoStatus(testClient, MongoUtils.DB);
+ assertNotNull(status.getVersion());
+ }
}