Ack, review only.

Will push on Nguyen's behalf.

On Fri, 16 Feb 2018 at 7:29 pm, Ravi Sekhar Reddy Konda <
ravisekhar.ko...@oracle.com> wrote:

> Hi Nguyen,
>
> Ack, code review only
>
> Regards,
> Ravi
>
> -----Original Message-----
> From: Nguyen Luu [mailto:nguyen.tk....@dektech.com.au]
> Sent: Tuesday, February 13, 2018 9:34 AM
> To: hans.nordeb...@ericsson.com; gary....@dektech.com.au;
> minh.c...@dektech.com.au; ravisekhar.ko...@oracle.com
> Cc: opensaf-devel@lists.sourceforge.net; Nguyen Luu <
> nguyen.tk....@dektech.com.au>
> Subject: [PATCH 1/1] amf: Validate env variable format set in
> comptype/comp objects [#2409]
>
> Valid environment variable should have the format 'var=value'.
> This validation shall now be done by AMF during CCB operations on
> SaAmfCompType (CREATE) and SaAmfComp (CREATE/MODIFY) objects regarding the
> saAmfxxxCmdEnv attribute.
> ---
>  src/amf/amfd/comp.cc     | 59
> +++++++++++++++++++++++++++++++++++++++++++++++-
>  src/amf/amfd/comp.h      |  2 ++
>  src/amf/amfd/comptype.cc | 27 +++++++++++++++++++---
>  3 files changed, 84 insertions(+), 4 deletions(-)
>
> diff --git a/src/amf/amfd/comp.cc b/src/amf/amfd/comp.cc index
> 482322d..10fb1c3 100644
> --- a/src/amf/amfd/comp.cc
> +++ b/src/amf/amfd/comp.cc
> @@ -1,7 +1,7 @@
>  /*      -*- OpenSAF  -*-
>   *
>   * (C) Copyright 2008 The OpenSAF Foundation
> - * (C) Copyright 2017 Ericsson AB - All Rights Reserved.
> + * (C) Copyright 2017, 2018 Ericsson AB. All rights reserved.
>   * Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved.
>   *
>   * This program is distributed in the hope that it will be useful, but @@
> -328,6 +328,26 @@ done:
>    TRACE_LEAVE();
>  }
>
> +/*
> + * Validate the component CmdEnv attribute
> + *
> + * @param const std::string
> + *
> + * @return bool
> + */
> +bool is_cmd_env_valid(const std::string &cmd_env_var) {
> +  /* following environment variable format is considered as invalid:
> +   * - containing 'whitespace'
> +   * - having none or more than one '='
> +   */
> +  if ((cmd_env_var.find_first_of(' ') != std::string::npos) ||
> +      (std::count(cmd_env_var.begin(), cmd_env_var.end(), '=') != 1)) {
> +    return false;
> +  }
> +
> +  return true;
> +}
> +
>  /**
>   * Validate configuration attributes for an AMF Comp object
>   * @param comp
> @@ -339,6 +359,7 @@ static int is_config_valid(const std::string &dn,
>                             CcbUtilOperationData_t *opdata) {
>    SaAisErrorT rc;
>    SaNameT aname;
> +  unsigned int num_of_cmd_env;
>    std::string::size_type pos;
>    SaUint32T value;
>
> @@ -399,6 +420,27 @@ static int is_config_valid(const std::string &dn,
>      return 0;
>    }
>
> +  if
> ((immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfCompCmdEnv")
> +                                   ,attributes, &num_of_cmd_env)) ==
> + SA_AIS_OK)  {
> +    for (unsigned int i = 0; i < num_of_cmd_env; i++) {
> +      std::string cmd_env = immutil_getStringAttr(attributes,
> +                                                  "saAmfCompCmdEnv",
> + i);
> +
> +      if (!is_cmd_env_valid(cmd_env)) {
> +        report_ccb_validation_error(opdata, "Unknown environment variable"
> +                                    " format '%s' for '%s'."
> +                                    " Should be 'var=value'",
> +                                    cmd_env.c_str(), dn.c_str());
> +        /* NOTE: We shall only fail the env variable format validation at
> CCB-
> +         * CREATE operation, but not during initial config read, so as to
> avoid
> +         * breaking systems with invalid env variables pre-existing in
> IMM */
> +        if (opdata != nullptr)
> +          return 0;
> +      }
> +    } // for (...; i < num_of_cmd_env;...)  }
> +
>  #if 0
>          if ((comp->comp_info.category == AVSV_COMP_TYPE_SA_AWARE) &&
> (comp->comp_info.init_len == 0)) {
>                  LOG_ER("Sa Aware Component: instantiation command not
> configured"); @@ -1038,6 +1080,21 @@ static SaAisErrorT
> ccb_completed_modify_hdlr(CcbUtilOperationData_t *opdata) {
>              opdata, "Modification of saAmfCompCmdEnv failed, nullptr
> arg");
>          goto done;
>        }
> +      for (unsigned index = 0; index < attribute->attrValuesNumber;
> index++) {
> +        std::string mod_comp_env = *(static_cast<char **>(attribute->
> +
> + attrValues[index]));
> +
> +        if (!is_cmd_env_valid(mod_comp_env)) {
> +          report_ccb_validation_error(opdata, "Modification of
> saAmfCompCmdEnv"
> +                                      " failed. Unknown environment
> variable"
> +                                      " format '%s' for '%s'."
> +                                      " Should be 'var=value'",
> +                                      mod_comp_env.c_str(),
> +                                      osaf_extended_name_borrow(&opdata->
> +
> objectName));
> +          goto done;
> +        }
> +      }
>      } else if (!strcmp(attribute->attrName,
> "saAmfCompInstantiateCmdArgv")) {
>        if (value_is_deleted == true) continue;
>        char *param_val = *((char **)value); diff --git
> a/src/amf/amfd/comp.h b/src/amf/amfd/comp.h index 1493d71..3544a3a 100644
> --- a/src/amf/amfd/comp.h
> +++ b/src/amf/amfd/comp.h
> @@ -1,6 +1,7 @@
>  /*      -*- OpenSAF  -*-
>   *
>   * (C) Copyright 2008 The OpenSAF Foundation
> + * (C) Copyright 2017, 2018 Ericsson AB. All rights reserved.
>   *
>   * This program is distributed in the hope that it will be useful, but
>   * WITHOUT ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY @@ -295,4 +296,5 @@ extern SaAisErrorT
> check_comp_stability(const AVD_COMP *);  extern AVD_CTCS_TYPE
> *get_ctcstype(const std::string &comptype_name,
>                                     const std::string &cstype_name);
> extern void comp_ccb_apply_delete_hdlr(struct CcbUtilOperationData *opdata);
> +extern bool is_cmd_env_valid(const std::string &cmd_env_var);
>  #endif  // AMF_AMFD_COMP_H_
> diff --git a/src/amf/amfd/comptype.cc b/src/amf/amfd/comptype.cc index
> b6d4d6d..aeaeaae 100644
> --- a/src/amf/amfd/comptype.cc
> +++ b/src/amf/amfd/comptype.cc
> @@ -1,6 +1,7 @@
>  /*      -*- OpenSAF  -*-
>   *
>   * (C) Copyright 2008 The OpenSAF Foundation
> + * (C) Copyright 2017, 2018 Ericsson AB. All rights reserved.
>   * Copyright (C) 2017, Oracle and/or its affiliates. All rights reserved.
>   *
>   * This program is distributed in the hope that it will be useful, but @@
> -95,9 +96,6 @@ static AVD_COMP_TYPE *comptype_create(const std::string &dn,
>    (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"),
>                          attributes, 0, &ct_sw_bundle);
>    compt->saAmfCtSwBundle = Amf::to_string(&ct_sw_bundle);
> -  if ((str = immutil_getStringAttr(attributes, "saAmfCtDefCmdEnv", 0)) !=
> -      nullptr)
> -    strcpy(compt->saAmfCtDefCmdEnv, str);
>
>  (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefClcCliTimeout"),
>                          attributes, 0, &compt->saAmfCtDefClcCliTimeout);
>
>  
> (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefCallbackTimeout"),
> @@ -203,6 +201,7 @@ static bool config_is_valid(const std::string &dn,
>    SaUint32T value;
>    SaTimeT time;
>    SaAisErrorT rc;
> +  unsigned int num_of_cmd_env;
>    const char *cmd;
>    const char *attr_name;
>    std::string::size_type pos;
> @@ -394,6 +393,28 @@ static bool config_is_valid(const std::string &dn,
>      return false;
>    }
>
> +  if ((immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>
> +                                   ("saAmfCtDefCmdEnv"), attributes,
> +                                   &num_of_cmd_env)) == SA_AIS_OK)  {
> +    for (unsigned int i = 0; i < num_of_cmd_env; i++) {
> +      std::string cmd_env = immutil_getStringAttr(attributes,
> +                                                  "saAmfCtDefCmdEnv",
> + i);
> +
> +      if (!is_cmd_env_valid(cmd_env)) {
> +        report_ccb_validation_error(opdata, "Unknown environment variable"
> +                                    " format '%s' for '%s'."
> +                                    " Should be 'var=value'",
> +                                    cmd_env.c_str(), dn.c_str());
> +        /* NOTE: We shall only fail the env variable format validation at
> CCB-
> +         * CREATE operation, but not during initial config read, so as to
> avoid
> +         * breaking systems with invalid env variables pre-existing in
> IMM */
> +        if (opdata != nullptr)
> +          return false;
> +      }
> +    } // for (...; i < num_of_cmd_env;...)  }
> +
>    return true;
>  }
>
> --
> 2.7.4
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Opensaf-devel mailing list
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to