コード例 #1
0
ファイル: fsal_config.c プロジェクト: jcsp/nfs-ganesha
fsal_status_t
load_FS_common_parameters_from_conf(config_file_t in_config,
                                    struct fsal_fs_params *common_info)
{
    int err;
    int var_max, var_index;
    char *key_name;
    char *key_value;
    config_item_t block;

    block = config_FindItemByName(in_config, CONF_LABEL_FS_COMMON);

    /* cannot read item */
    if (block == NULL) {
        LogCrit(COMPONENT_CONFIG,
                "FSAL LOAD PARAMETER: Cannot read item \"%s\" from configuration file",
                CONF_LABEL_FS_COMMON);
        return fsalstat(ERR_FSAL_NOENT, 0);
    } else if (config_ItemType(block) != CONFIG_ITEM_BLOCK) {
        LogCrit(COMPONENT_CONFIG,
                "FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block",
                CONF_LABEL_FS_COMMON);
        return fsalstat(ERR_FSAL_INVAL, 0);
    }

    var_max = config_GetNbItems(block);

    for (var_index = 0; var_index < var_max; var_index++) {
        config_item_t item;

        item = config_GetItemByIndex(block, var_index);

        err = config_GetKeyValue(item, &key_name, &key_value);
        if (err) {
            LogCrit(COMPONENT_CONFIG,
                    "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.",
                    var_index, CONF_LABEL_FS_COMMON);
            return fsalstat(ERR_FSAL_SERVERFAULT, err);
        }

        /* does the variable exists ? */
        if (!STRCMP(key_name, "link_support")) {

            int val = str_to_bool(key_value);

            if (val == -1) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            /* if set to false, force value to false.
             * else keep fs default.
             */
            SET_INIT_INFO(common_info, link_support,
                          FSAL_INIT_MAX_LIMIT, val);

        } else if (!STRCMP(key_name, "symlink_support")) {
            int val = str_to_bool(key_value);

            if (val == -1) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            /* if set to false, force value to false.
             * else keep fs default.
             */
            SET_INIT_INFO(common_info, symlink_support,
                          FSAL_INIT_MAX_LIMIT, val);
        } else if (!STRCMP(key_name, "cansettime")) {
            int val = str_to_bool(key_value);

            if (val == -1) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: 0 or 1 expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            /* if set to false, force value to false.
             * else keep fs default.
             */
            SET_INIT_INFO(common_info, cansettime,
                          FSAL_INIT_MAX_LIMIT, val);

        } else if (!STRCMP(key_name, "maxread")) {
            int size;

            size = s_read_int(key_value);

            SET_INIT_INFO(common_info, maxread,
                          FSAL_INIT_FORCE_VALUE, size);

        } else if (!STRCMP(key_name, "maxwrite")) {
            uint32_t size;

            size = s_read_int(key_value);

            SET_INIT_INFO(common_info, maxwrite,
                          FSAL_INIT_FORCE_VALUE, size);

        } else if (!STRCMP(key_name, "umask")) {
            int mode = s_read_octal(key_value);

            if (mode < 0) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: octal expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            SET_INIT_INFO(common_info, umask, FSAL_INIT_FORCE_VALUE,
                          unix2fsal_mode(mode));

        } else if (!STRCMP(key_name, "auth_xdev_export")) {
            int val = str_to_bool(key_value);

            if (val == -1) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: boolean expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            SET_INIT_INFO(common_info, auth_exportpath_xdev,
                          FSAL_INIT_FORCE_VALUE, val);
        } else if (!STRCMP(key_name, "xattr_access_rights")) {
            int mode = s_read_octal(key_value);

            if (mode < 0) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: octal expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

            SET_INIT_INFO(common_info, xattr_access_rights,
                          FSAL_INIT_FORCE_VALUE,
                          unix2fsal_mode(mode));

        } else {
            LogCrit(COMPONENT_CONFIG,
                    "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)",
                    key_name, CONF_LABEL_FS_COMMON);
            return fsalstat(ERR_FSAL_INVAL, 0);
        }

    }

    return fsalstat(ERR_FSAL_NO_ERROR, 0);
}
コード例 #2
0
ファイル: fsal_tools.c プロジェクト: chandra2/nfs-ganesha
fsal_status_t LUSTREFSAL_load_FSAL_parameter_from_conf(config_file_t in_config,
                                                       fsal_parameter_t * out_parameter)
{
  int err;
  int var_max, var_index;
  char *key_name;
  char *key_value;
  config_item_t block;

  int DebugLevel = -1;
  char *LogFile = NULL;

  block = config_FindItemByName(in_config, CONF_LABEL_FSAL);

  /* cannot read item */

  if(block == NULL)
    {
      LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: Cannot read item \"%s\" from configuration file",
                 CONF_LABEL_FSAL);
      ReturnCode(ERR_FSAL_NOENT, 0);
    }
  else if(config_ItemType(block) != CONFIG_ITEM_BLOCK)
    {
      LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block",
                 CONF_LABEL_FSAL);
      ReturnCode(ERR_FSAL_INVAL, 0);
    }

  /* read variable for fsal init */

  var_max = config_GetNbItems(block);

  for(var_index = 0; var_index < var_max; var_index++)
    {
      config_item_t item;

      item = config_GetItemByIndex(block, var_index);

      err = config_GetKeyValue(item, &key_name, &key_value);
      if(err)
        {
	  LogCrit(COMPONENT_FSAL,
              "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.",
               var_index, CONF_LABEL_FSAL);
          ReturnCode(ERR_FSAL_SERVERFAULT, err);
        }

      if(!STRCMP(key_name, "DebugLevel"))
        {
          DebugLevel = ReturnLevelAscii(key_value);

          if(DebugLevel == -1)
            {
              LogCrit(COMPONENT_FSAL,"FSAL LOAD PARAMETER: ERROR: Invalid debug level name: \"%s\".",
                         key_value);
              ReturnCode(ERR_FSAL_INVAL, -1);
            }

        }
      else if(!STRCMP(key_name, "LogFile"))
        {

          LogFile = key_value;

        }
      else if(!STRCMP(key_name, "Max_FS_calls"))
        {

          int maxcalls = s_read_int(key_value);

          if(maxcalls < 0)
            {
              LogCrit(COMPONENT_FSAL,
                  "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: null or positive integer expected.",
                   key_name);
              ReturnCode(ERR_FSAL_INVAL, 0);
            }

          out_parameter->fsal_info.max_fs_calls = (unsigned int)maxcalls;

        }
      else
        {
          LogCrit(COMPONENT_FSAL,
              "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)",
               key_name, CONF_LABEL_FSAL);
          ReturnCode(ERR_FSAL_INVAL, 0);
        }

    }

  /* init logging */
  if(LogFile)
    SetComponentLogFile(COMPONENT_FSAL, LogFile);

  if(DebugLevel != -1)
    SetComponentLogLevel(COMPONENT_FSAL, DebugLevel);

  ReturnCode(ERR_FSAL_NO_ERROR, 0);

}                               /* FSAL_load_FSAL_parameter_from_conf */
コード例 #3
0
ファイル: fsal_config.c プロジェクト: jcsp/nfs-ganesha
static fsal_status_t load_FSAL_parameters_from_conf(config_file_t in_config,
        const char *fsal_name,
        fsal_init_info_t *
        init_info,
        fsal_extra_arg_parser_f
        extra)
{
    int err;
    int var_max, var_index;
    char *key_name;
    char *key_value;
    config_item_t fsal_block, block = NULL;
    int i, fsal_cnt;

    fsal_block = config_FindItemByName(in_config, CONF_LABEL_FSAL);
    if (fsal_block == NULL) {
        LogFatal(COMPONENT_INIT,
                 "Cannot find item \"%s\" in configuration",
                 CONF_LABEL_FSAL);
        return fsalstat(ERR_FSAL_NOENT, 0);
    }
    if (config_ItemType(fsal_block) != CONFIG_ITEM_BLOCK) {
        LogFatal(COMPONENT_INIT, "\"%s\" is not a block",
                 CONF_LABEL_FSAL);
        return fsalstat(ERR_FSAL_NOENT, 0);
    }
    fsal_cnt = config_GetNbItems(fsal_block);
    for (i = 0; i < fsal_cnt; i++) {
        block = config_GetItemByIndex(fsal_block, i);
        if (config_ItemType(block) == CONFIG_ITEM_BLOCK
                && strcasecmp(config_GetBlockName(block), fsal_name) == 0) {
            break;
        }
    }
    if (i == fsal_cnt) {
        LogFatal(COMPONENT_INIT,
                 "Cannot find the %s section of %s in the configuration file",
                 fsal_name, CONF_LABEL_FSAL);
        return fsalstat(ERR_FSAL_NOENT, 0);
    }
    if (config_ItemType(block) != CONFIG_ITEM_BLOCK) {
        LogCrit(COMPONENT_CONFIG,
                "FSAL LOAD PARAMETER: Item \"%s\" is expected to be a block",
                fsal_name);
        return fsalstat(ERR_FSAL_INVAL, 0);
    }

    /* read variable for fsal init */

    var_max = config_GetNbItems(block);

    for (var_index = 0; var_index < var_max; var_index++) {
        config_item_t item;

        item = config_GetItemByIndex(block, var_index);

        err = config_GetKeyValue(item, &key_name, &key_value);
        if (err) {
            LogCrit(COMPONENT_CONFIG,
                    "FSAL LOAD PARAMETER: ERROR reading key[%d] from section \"%s\" of configuration file.",
                    var_index, CONF_LABEL_FSAL);
            return fsalstat(ERR_FSAL_SERVERFAULT, err);
        }

        if (!STRCMP(key_name, "DebugLevel")
                || !STRCMP(key_name, "LogFile")) {
            LogWarn(COMPONENT_CONFIG,
                    "Deprecated FSAL option %s=\'%s\'", key_name,
                    key_value);
        } else if (!STRCMP(key_name, "Max_FS_calls")) {

            int maxcalls = s_read_int(key_value);

            if (maxcalls < 0) {
                LogCrit(COMPONENT_CONFIG,
                        "FSAL LOAD PARAMETER: ERROR: Unexpected value for %s: null or positive integer expected.",
                        key_name);
                return fsalstat(ERR_FSAL_INVAL, 0);
            }

        } else if (strcasecmp(key_name, "FSAL_Shared_Library") == 0) {
            continue;	/* scanned at load time */
        } else if ((extra == NULL)
                   ||
                   ((*extra)
                    (key_name, key_value, init_info, fsal_name))) {
            LogCrit(COMPONENT_CONFIG,
                    "FSAL LOAD PARAMETER: ERROR: Unknown or unsettable key: %s (item %s)",
                    key_name, CONF_LABEL_FSAL);
            return fsalstat(ERR_FSAL_INVAL, 0);
        }

    }

    return fsalstat(ERR_FSAL_NO_ERROR, 0);

}