From f45ec23405754c35f1a58950f8043d14c355dfbf Mon Sep 17 00:00:00 2001 From: Bin Qian Date: Fri, 27 Sep 2019 12:12:21 -0400 Subject: [PATCH] Clean up license code Remove any license verification and interpretation. Closes-Bug: 1845522 Change-Id: I1ca264311bc8ea0d828ea01c890220641a20e6a5 Signed-off-by: Bin Qian --- .../platform_util/license/license.py | 180 +----------------- 1 file changed, 3 insertions(+), 177 deletions(-) diff --git a/utilities/platform-util/platform-util/platform_util/license/license.py b/utilities/platform-util/platform-util/platform_util/license/license.py index 57c47204..eb931d6b 100644 --- a/utilities/platform-util/platform-util/platform_util/license/license.py +++ b/utilities/platform-util/platform-util/platform_util/license/license.py @@ -1,193 +1,19 @@ # -# Copyright (c) 2017-2018 Wind River Systems, Inc. +# Copyright (c) 2017-2019 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # -from ctypes import cdll -from ctypes import util -from ctypes import c_bool -from ctypes import c_int -from ctypes import c_char_p -from ctypes import pointer -from ctypes import create_string_buffer import logging import os -from platform_util.license import constants from platform_util.license import exception -import re import sys -from sysinv.common import constants as sysinv_constants -from tsconfig.tsconfig import system_type -from tsconfig.tsconfig import system_mode -from tsconfig.tsconfig import SW_VERSION LOG = logging.getLogger(__name__) -sm_common = cdll.LoadLibrary(util.find_library("sm_common")) - - -class c_char_p_sub(c_char_p): - pass - - -def get_licenses_info(): - """Get the license information""" - - feature_list = [] - sm_common.flex_lm_license_get_feature_list.restype = c_char_p_sub - features = sm_common.flex_lm_license_get_feature_list() - if features.value: - feature_list = [feature for feature in features.value.split(',') - if feature.startswith(constants.FEATURE_PREFIX)] - sm_common.flex_lm_license_free(features) - - lc_attrs_list = [] - licenses = [license for license in constants.LICENSE_NAMES] - for feature in feature_list: - try: - lc_attrs = verify_feature_license(feature) - except Exception as e: - # Set the license attributes for installed expired licenses - if constants.EXPIRED.lower() in e: - process_license = True - status = constants.INSTALLED - expiry_date = constants.EXPIRED - # Set the license attributes for installed invalid licenses - elif constants.INVALID or constants.VERSION_LICENSE_ERR in e: - process_license = True - status = constants.INVALID - expiry_date = '-' - # Unknown license - else: - process_license = False - LOG.warning("Feature %s is not supported." % feature) - - # Send supporting licenses only - name = constants.LICENSE_MAP.get(feature) - if process_license and name: - lc_attrs = dict(name=name, status=status, - expiry_date=expiry_date) - else: - lc_attrs = dict() - - if lc_attrs: - license_name = lc_attrs.get('name') - if (not any(lc.get('name') == license_name - for lc in lc_attrs_list)): - # Get the list of license attributes for all valid - # licenses and installed expired/invalid licenses - lc_attrs_list.append(lc_attrs) - if license_name in licenses: - # Get the list of not-installed license names - licenses.remove(license_name) - - # Set the license attributes for all - # not-installed licenses - for license_name in licenses: - lc_attrs = dict(name=license_name, - status=constants.NOT_INSTALLED, - expiry_date='-') - lc_attrs_list.append(lc_attrs) - - # Return the list of license attributes - # for all supporting licenses - return lc_attrs_list - - -def verify_feature_license(feature_name, feature_version=None): - """Verify a license of a feature""" - - valid = pointer(c_bool(0)) - - if not feature_version: - feature_version = SW_VERSION - - expire_days_left = pointer(c_int(0)) - expire_date_text = create_string_buffer( - constants.LICENSE_DATE_TEXT_MAX_CHAR) - vendor = create_string_buffer( - constants.LICENSE_VENDOR_MAX_CHAR) - err_msg = create_string_buffer( - constants.LICENSE_ERR_MSG_MAX_CHAR) - - LOG.info("License check. License feature name=%s version=%s", - feature_name, feature_version) - feature_check = sm_common.sm_license_check(valid, - feature_name, - feature_version, - expire_days_left, expire_date_text, - vendor, err_msg) - sm_common.sm_error_str.restype = c_char_p - if (sm_common.sm_error_str(feature_check) != 'OKAY' or - (not valid.contents.value)): - - LOG.error("License check error, error = %s\n", err_msg.value) - msg = "ERROR: License check failed; " - if constants.NO_FEATURE_LICENSE_ERR in err_msg.value: - msg += "the license file does not contain the required license." - raise exception.LicenseNotFound(msg) - elif constants.EXPIRED_LICENSE_ERR in err_msg.value: - msg += "the license file contains a license that is expired." - raise exception.ExpiredLicense(msg) - elif constants.VERSION_LICENSE_ERR in err_msg.value: - msg += "the license file contains a license which is NOT applicable " \ - "to the current system software version." - raise exception.InvalidLicenseVersion(msg) - else: - msg += "the license file contains an invalid license." - raise exception.InvalidLicense(msg) - - vendor = re.search(r'\(.*?)\<\/name\>', vendor.value) - if vendor: - license_name = vendor.group(1) - else: - license_name = constants.LICENSE_MAP.get(feature_name) - - # Return license attributes of a valid license - lc_attrs = dict(name=license_name, status=constants.INSTALLED, - expiry_date=expire_date_text.value) - - return lc_attrs - - def verify_license(license_file): """Verify all features in a license file""" - - os.environ["LM_LICENSE_FILE"] = license_file - os.environ["WIND_LICENSE_PROXY"] = "/usr/bin/wrlmproxy-5.0.2" - - # Get all features in the license file - feature_list = [] - sm_common.flex_lm_license_get_feature_list.restype = c_char_p_sub - features = sm_common.flex_lm_license_get_feature_list() - if features.value: - feature_list = [feature for feature in features.value.split(',') - if feature.startswith(constants.FEATURE_PREFIX)] - sm_common.flex_lm_license_free(features) - - # Validate license of each feature in the license file - for feature in feature_list: - verify_feature_license(feature) - - if system_type == sysinv_constants.TIS_AIO_BUILD: - if system_mode == sysinv_constants.SYSTEM_MODE_SIMPLEX: - product_license = constants.AIO_SIMPLEX_SYSTEM_LICENSES - elif (system_mode == sysinv_constants.SYSTEM_MODE_DUPLEX or - system_mode == sysinv_constants.SYSTEM_MODE_DUPLEX_DIRECT): - product_license = constants.AIO_SYSTEM_LICENSES - elif system_type == sysinv_constants.TIS_STD_BUILD: - product_license = constants.STD_SYSTEM_LICENSES - - # Verify the right product license is installed - if not any(feature in feature_list for feature in product_license): - raise exception.InvalidLicenseType( - "ERROR: License check failed; the license file does not contain a " - "product license for the current %s/%s." % (system_type, system_mode)) - - # Verify the licensed tech-preview technologies(ex. baremetal container..) - # Check if magnum or ironic services are currently running - # If yes, verify the feature licenses for magnum/ironic are licensed in the - # license file. + if not os.path.isfile(license_file): + raise exception.LicenseNotFound() def main():