浏览代码

HUE-8941 [libsaml] Protect xmlsec dynamic default when which is not present

Romain 6 年之前
父节点
当前提交
917eed1b9e
共有 2 个文件被更改,包括 35 次插入1 次删除
  1. 3 1
      desktop/libs/libsaml/src/libsaml/conf.py
  2. 32 0
      desktop/libs/libsaml/src/libsaml/tests.py

+ 3 - 1
desktop/libs/libsaml/src/libsaml/conf.py

@@ -36,7 +36,7 @@ def xmlsec():
   try:
     proc = subprocess.Popen(['which', 'xmlsec1'], stdout=subprocess.PIPE)
     return proc.stdout.read().strip()
-  except subprocess.CalledProcessError:
+  except (subprocess.CalledProcessError, OSError):
     return '/usr/local/bin/xmlsec1'
 
 
@@ -178,6 +178,7 @@ NAME_ID_FORMAT = Config(
   type=str,
   help=_t("Request this NameID format from the server"))
 
+
 def get_key_file_password():
   password = os.environ.get('HUE_SAML_KEY_FILE_PASSWORD')
   if password is not None:
@@ -189,6 +190,7 @@ def get_key_file_password():
 
   return password
 
+
 def config_validator(user):
   res = []
   if USERNAME_SOURCE.get() not in USERNAME_SOURCES:

+ 32 - 0
desktop/libs/libsaml/src/libsaml/tests.py

@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+## -*- coding: utf-8 -*-
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from mock import patch, Mock, MagicMock
+from nose.tools import assert_equal, assert_true, assert_false
+
+from libsaml.conf import xmlsec
+
+
+def test_xmlsec_dynamic_default_no_which():
+
+  with patch('libsaml.conf.subprocess') as subprocess:
+    subprocess.Popen = Mock(
+      side_effect = OSError('No such file or directory. `which` command is not present')
+    )
+
+    assert_equal('/usr/local/bin/xmlsec1', xmlsec())