Kaynağa Gözat

AMBARI-2568. Setup LDAP does not validate true/false response. (Dmitry L via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1499862 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 12 yıl önce
ebeveyn
işleme
3d3c6824fb

+ 9 - 1
ambari-server/src/main/python/ambari-server.py

@@ -262,6 +262,9 @@ DATABASE_DROP_SCRIPTS = ['/var/lib/ambari-server/resources/Ambari-DDL-Postgres-R
 
 REGEX_IP_ADDRESS = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
 REGEX_HOSTNAME = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
+REGEX_HOSTNAME_PORT = "^(.*:[0-9]{1,5}$)"
+REGEX_TRUE_FALSE = "^(true|false)?$"
+REGEX_ANYTHING = ".*"
 
 POSTGRES_EXEC_ARGS = "-h {0} -p {1} -d {2} -U {3} -f {4} -v username='\"{3}\"'"
 ORACLE_EXEC_ARGS = "-S '{0}/{1}@(description=(address=(protocol=TCP)(host={2})(port={3}))(connect_data=(sid={4})))' @{5} {0}"
@@ -2358,7 +2361,12 @@ def setup_ldap():
 
   ldap_property_value_map = {}
   for idx, key in enumerate(ldap_property_list_reqd):
-    pattern = ".*" if idx != 0 else "^(.*:[0-9]{1,5}$)"
+    if idx == 0:
+      pattern = REGEX_HOSTNAME_PORT
+    elif idx in [2, 5]:
+      pattern = REGEX_TRUE_FALSE
+    else:
+      pattern = REGEX_ANYTHING
     input = get_validated_string_input(ldap_properties_map_reqd[key][1],
       ldap_properties_map_reqd[key][0], pattern,
       "Invalid characters in the input!", False, ldap_properties_map_reqd[key][2])

+ 33 - 0
ambari-server/src/test/python/TestAmbaryServer.py

@@ -17,6 +17,7 @@ limitations under the License.
 '''
 
 import StringIO
+import re
 from unittest import TestCase
 import sys
 from mock.mock import patch
@@ -3170,6 +3171,38 @@ class TestAmbariServer(TestCase):
     self.assertTrue(str1 != str2)
 
 
+  def test_regexps(self):
+    res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "ddd")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:ff")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:55444325")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_HOSTNAME_PORT, "gg:555")
+    self.assertTrue(res is not None)
+
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "")
+    self.assertTrue(res is not None)
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "t")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "trrrr")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "true|false")
+    self.assertTrue(res is None)
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "true")
+    self.assertTrue(res is not None)
+    res = re.search(ambari_server.REGEX_TRUE_FALSE, "false")
+    self.assertTrue(res is not None)
+
+    res = re.search(ambari_server.REGEX_ANYTHING, "")
+    self.assertTrue(res is not None)
+    res = re.search(ambari_server.REGEX_ANYTHING, "t")
+    self.assertTrue(res is not None)
+    res = re.search(ambari_server.REGEX_ANYTHING, "trrrr")
+    self.assertTrue(res is not None)
+
 
   def get_sample(self, sample):
     """