Ver código fonte

AMBARI-2527. Setup master key does not prompt for incorrect user input. (swagle)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1498696 13f79535-47bb-0310-9956-ffa450edef68
Siddharth Wagle 12 anos atrás
pai
commit
fdf349a6f4

+ 25 - 11
ambari-server/src/main/python/ambari-server.py

@@ -1832,7 +1832,7 @@ def setup(args):
       err = 'Unable to start PostgreSQL server. Exiting'
       raise FatalException(retcode, err)
 
-    print 'Configuring database...'
+    print 'Configuring local database...'
     retcode = setup_db(args)
     if not retcode == 0:
       err = 'Running database init script was failed. Exiting.'
@@ -2386,13 +2386,32 @@ def reset_master_key():
     raise FatalException(4, err)
   setup_master_key(resetKey=True)
 
+def read_master_key():
+  passwordPattern = ".*"
+  passwordDescr = "Invalid characters in password. Use only alphanumeric or "\
+                  "_ or - characters"
+  passwordDefault = ""
+
+  masterKey = get_validated_string_input(
+      "Please provide master key for the credential store: ",
+      passwordDefault, passwordPattern, passwordDescr, True, True)
+
+  if not masterKey:
+    print "Master Key cannot be empty!"
+    return read_master_key()
+
+  masterKey2 = get_validated_string_input( "Re-enter master key: ",
+      passwordDefault, passwordPattern, passwordDescr, True, True)
+
+  if masterKey != masterKey2:
+    print "Master key did not match!"
+    return read_master_key()
+
+  return masterKey
+
 
 def setup_master_key(resetKey=False):
   properties = get_ambari_properties()
-  passwordPattern = "^[a-zA-Z0-9_-]*$"
-  passwordDescr = "Invalid characters in password. Use only alphanumeric or "\
-                  "_ or - characters"
-  passwordDefault = "hadooprocks!"
   # check configuration for location of master key
   keyLocation = get_master_key_location(properties)
   persist = get_master_key_ispersisted(properties)
@@ -2420,12 +2439,7 @@ def setup_master_key(resetKey=False):
 
   key = None
   if masterKeyFile is None or resetKey:
-    key = get_validated_string_input(
-      "Please provide master key for the credential store: ",
-      passwordDefault, passwordPattern, passwordDescr, True, False)
-    if key != passwordDefault:
-      key = get_validated_string_input("Please re-enter master key: ",
-        passwordDefault, passwordPattern, passwordDescr, True, False)
+    key = read_master_key()
 
     persist = get_YN_input("Do you want to persist master key. If you choose "\
                            "not to persist, you need to provide the master "\

+ 23 - 14
ambari-server/src/test/python/TestAmbaryServer.py

@@ -967,7 +967,8 @@ class TestAmbariServer(TestCase):
     args.jce_policy = None
     ambari_server.install_jce_manualy(args)
 
-  
+
+  @patch.object(ambari_server, 'read_ambari_user')
   @patch.object(ambari_server, "get_validated_string_input")
   @patch.object(ambari_server, "find_properties_file")
   @patch.object(ambari_server, "get_ambari_properties")
@@ -981,7 +982,8 @@ class TestAmbariServer(TestCase):
                        import_cert_and_key_action_mock,
                        is_server_runing_mock, get_ambari_properties_mock,\
                        find_properties_file_mock,\
-                       get_validated_string_input_mock):
+                       get_validated_string_input_mock,
+                       read_ambari_user_method):
     args = MagicMock()
     open_Mock.return_value = file
     p = get_ambari_properties_mock.return_value
@@ -998,7 +1000,7 @@ class TestAmbariServer(TestCase):
 
     # Testing call under root
     is_root_mock.return_value = True
-
+    read_ambari_user_method.return_value = None
     #Case #1: if client ssl is on and user didnt choose 
     #disable ssl option and choose import certs and keys
     p.get_property.side_effect = ["key_dir","5555","6666", "true"]
@@ -2761,15 +2763,16 @@ class TestAmbariServer(TestCase):
     sys.stdout = sys.__stdout__
 
 
-
+  @patch.object(ambari_server, 'read_ambari_user')
+  @patch.object(ambari_server, 'read_master_key')
   @patch.object(ambari_server, 'update_properties')
   @patch.object(ambari_server, 'save_master_key')
-  @patch.object(ambari_server, 'get_validated_string_input')
   @patch.object(ambari_server, 'get_YN_input')
   @patch.object(ambari_server, 'get_ambari_properties')
   def test_setup_master_key_persist(self, get_ambari_properties_method,
-            get_YN_input_method, get_validated_string_input_method,
-            save_master_key_method, update_properties_method):
+            get_YN_input_method, save_master_key_method,
+            update_properties_method, read_master_key_method,
+            read_ambari_user_method):
 
     out = StringIO.StringIO()
     sys.stdout = out
@@ -2779,28 +2782,32 @@ class TestAmbariServer(TestCase):
 
     get_ambari_properties_method.return_value = configs
     get_YN_input_method.return_value = True
-    get_validated_string_input_method.return_value = "aaa"
+    read_master_key_method.return_value = "aaa"
+    read_ambari_user_method.return_value = None
     save_master_key_method.return_value = None
     update_properties_method.return_value = None
 
     ambari_server.setup_master_key(False)
 
     self.assertTrue(get_YN_input_method.called)
-    self.assertTrue(get_validated_string_input_method.called)
+    self.assertTrue(read_master_key_method.called)
+    self.assertTrue(read_ambari_user_method.called)
     self.assertTrue(save_master_key_method.called)
     self.assertTrue(update_properties_method.called)
 
     sys.stdout = sys.__stdout__
 
 
+  @patch.object(ambari_server, 'read_ambari_user')
+  @patch.object(ambari_server, 'read_master_key')
   @patch.object(ambari_server, 'update_properties')
   @patch.object(ambari_server, 'save_master_key')
-  @patch.object(ambari_server, 'get_validated_string_input')
   @patch.object(ambari_server, 'get_YN_input')
   @patch.object(ambari_server, 'get_ambari_properties')
   def test_setup_master_key_not_persist(self, get_ambari_properties_method,
-              get_YN_input_method, get_validated_string_input_method,
-              save_master_key_method, update_properties_method):
+              get_YN_input_method, save_master_key_method,
+              update_properties_method, read_master_key_method,
+              read_ambari_user_method):
 
     out = StringIO.StringIO()
     sys.stdout = out
@@ -2810,14 +2817,16 @@ class TestAmbariServer(TestCase):
 
     get_ambari_properties_method.return_value = configs
     get_YN_input_method.side_effect = [True, False]
-    get_validated_string_input_method.return_value = "aaa"
+    read_master_key_method.return_value = "aaa"
+    read_ambari_user_method.return_value = None
     save_master_key_method.return_value = None
     update_properties_method.return_value = None
 
     ambari_server.setup_master_key(False)
 
     self.assertTrue(get_YN_input_method.called)
-    self.assertTrue(get_validated_string_input_method.called)
+    self.assertTrue(read_master_key_method.called)
+    self.assertTrue(read_ambari_user_method.called)
     self.assertTrue(update_properties_method.called)
     self.assertFalse(save_master_key_method.called)