Просмотр исходного кода

HDDS-1355. Only FQDN is accepted for OM rpc address in secure environment. Contributed by Ajay Kumar.

Closes #677
Ajay Kumar 6 лет назад
Родитель
Сommit
bfc90bdc64

+ 17 - 0
hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestSecureOzoneManager.java

@@ -51,6 +51,7 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_NAMES;
 import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_ACL_ENABLED;
 import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_OPEN_KEY_EXPIRE_THRESHOLD_SECONDS;
 import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SECURITY_ENABLED_KEY;
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ADDRESS_KEY;
 import static org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod.KERBEROS;
 import static org.apache.hadoop.test.GenericTestUtils.*;
 
@@ -221,4 +222,20 @@ public class TestSecureOzoneManager {
     omLogs.clearOutput();
   }
 
+  /**
+   * Test om bind socket address.
+   */
+  @Test
+  public void testSecureOmInitFailure() throws Exception {
+    OzoneConfiguration config = new OzoneConfiguration(conf);
+    OMStorage omStorage = new OMStorage(config);
+    omStorage.setClusterId(clusterId);
+    omStorage.setScmId(scmId);
+    omStorage.setOmId(omId);
+    config.set(OZONE_OM_ADDRESS_KEY, "om-unknown");
+    LambdaTestUtils.intercept(RuntimeException.class, "Can't get SCM signed" +
+            " certificate",
+        () -> OzoneManager.initializeSecurity(config, omStorage));
+  }
+
 }

+ 7 - 3
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java

@@ -1374,8 +1374,12 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     KeyPair keyPair = new KeyPair(client.getPublicKey(),
         client.getPrivateKey());
     InetSocketAddress omRpcAdd;
-
     omRpcAdd = OmUtils.getOmAddress(config);
+    if (omRpcAdd == null || omRpcAdd.getAddress() == null) {
+      LOG.error("Incorrect om rpc address. omRpcAdd:{}", omRpcAdd);
+      throw new RuntimeException("Can't get SCM signed certificate. " +
+          "omRpcAdd: " + omRpcAdd);
+    }
     // Get host name.
     String hostname = omRpcAdd.getAddress().getHostName();
 
@@ -1388,7 +1392,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
         .setScmID(omStore.getScmId())
         .setClusterID(omStore.getClusterID())
         .setSubject(subject)
-        .addIpAddress(omRpcAdd.getAddress().getHostAddress());
+        .addIpAddress(hostname);
 
     LOG.info("Creating csr for OM->dns:{},ip:{},scmId:{},clusterId:{}," +
             "subject:{}", hostname, omRpcAdd.getAddress().getHostAddress(),
@@ -1397,7 +1401,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     HddsProtos.OzoneManagerDetailsProto.Builder omDetailsProtoBuilder =
         HddsProtos.OzoneManagerDetailsProto.newBuilder()
             .setHostName(omRpcAdd.getHostName())
-            .setIpAddress(omRpcAdd.getAddress().getHostAddress())
+            .setIpAddress(hostname)
             .setUuid(omStore.getOmId())
             .addPorts(HddsProtos.Port.newBuilder()
                 .setName(RPC_PORT)