Beispiel #1
0
/**
 * \brief Parse an audio command [Level 2]
 * \param tokens Command tokens.
 * \param cmd Cmd structure.
 * \return The error result.
 */
static TuxDrvError
parse_tux_audio_command(tokens_t tokens, delay_cmd_t *cmd)
{
    TuxDrvError ret =  E_TUXDRV_INVALIDCOMMAND;

    if (strcmp(tokens[2], "CHANNEL_GENERAL") == 0)
    {
        cmd->sub_command = CHANNEL_GENERAL;
        ret = E_TUXDRV_NOERROR;
    }
    else if (strcmp(tokens[2], "CHANNEL_TTS") == 0)
    {
        cmd->sub_command = CHANNEL_TTS;
        ret = E_TUXDRV_NOERROR;
    }
    else if (strcmp(tokens[2], "MUTE") == 0)
    {
        cmd->sub_command = MUTE;
        if (str_to_bool(tokens[3], &cmd->audio_mute_parameters.muteflag))
        {
            // write to struct
            ret = E_TUXDRV_NOERROR;
        }
    }
    return ret;
}
static bool get_bool(const char *name, const char *arg)
{
    bool b = str_to_bool(arg);
    if (DEBUG_CONFIG(2))
	fprintf(dbgout, "%s -> %s\n", name,
		b ? "Yes" : "No");
    return b;
}
Beispiel #3
0
bool Config_GetValue_Bool(const char *KeyName, bool* Value)
{
	const tConfigValue* val = Config_int_GetValue(KeyName, 0);
	if(!val)	return false;
	
	*Value = str_to_bool(val->Data);
	
	return true;
}
Beispiel #4
0
static int set_general_bool(struct arguments *args, enum general_module module, __u8 type,
		char *value)
{
	__u8 tmp;
	int error;

	error = str_to_bool(value, &tmp);
	if (error)
		return error;

	return set_general_arg(args, module, type, sizeof(tmp), &tmp);
}
Beispiel #5
0
void ufwiclient_use_config()
{
	char *value;

	default_hostname = ufwiclient_config_table_get("nuauth_ip");
	default_port = ufwiclient_config_table_get("nuauth_port");
	default_tls_ca = ufwiclient_config_table_get("nuauth_tls_ca");
	default_tls_cert = ufwiclient_config_table_get("nuauth_tls_cert");
	default_tls_key = ufwiclient_config_table_get("nuauth_tls_key");
	default_tls_crl = ufwiclient_config_table_get("nuauth_tls_crl");

	value = ufwiclient_config_table_get("nuauth_suppress_fqdn_verif");
	if (value) {
		default_suppress_fqdn_verif = str_to_bool(value,1);
	}
}
static GtkSourceContextFlags
get_context_flags (ParserState *parser_state)
{
	guint i;
	xmlChar *value;
	GtkSourceContextFlags flags = GTK_SOURCE_CONTEXT_EXTEND_PARENT;
	const gchar *names[] = {
		"extend-parent", "end-parent", "end-at-line-end",
		"first-line-only", "once-only", "style-inside"
	};
	GtkSourceContextFlags values[] = {
		GTK_SOURCE_CONTEXT_EXTEND_PARENT,
		GTK_SOURCE_CONTEXT_END_PARENT,
		GTK_SOURCE_CONTEXT_END_AT_LINE_END,
		GTK_SOURCE_CONTEXT_FIRST_LINE_ONLY,
		GTK_SOURCE_CONTEXT_ONCE_ONLY,
		GTK_SOURCE_CONTEXT_STYLE_INSIDE
	};

	g_assert (G_N_ELEMENTS (names) == G_N_ELEMENTS (values));

	for (i = 0; i < G_N_ELEMENTS (names); ++i)
	{
		value = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST names[i]);

		if (value != NULL)
		{
			if (str_to_bool (value))
				flags |= values[i];
			else
				flags &= ~values[i];
		}

		xmlFree (value);
	}

	return flags;
}
static GRegexCompileFlags
update_regex_flags (GRegexCompileFlags  flags,
		    const xmlChar      *option_name,
		    const xmlChar      *value)
{
	GRegexCompileFlags single_flag;
	gboolean set_flag;

	DEBUG (g_message ("setting the '%s' regex flag to %s", option_name, value));

	set_flag = str_to_bool (value);

	if (xmlStrcmp (BAD_CAST "case-sensitive", option_name) == 0)
	{
		single_flag = G_REGEX_CASELESS;
		set_flag = !set_flag;
	}
	else if (xmlStrcmp (BAD_CAST "extended", option_name) == 0)
	{
		single_flag = G_REGEX_EXTENDED;
	}
	else if (xmlStrcmp (BAD_CAST "dupnames", option_name) == 0)
	{
		single_flag = G_REGEX_DUPNAMES;
	}
	else
	{
		return flags;
	}

	if (set_flag)
		flags |= single_flag;
	else
		flags &= ~single_flag;

	return flags;
}
Beispiel #8
0
/*
 * PARSER. Field 2 in ARGP.
 */
static int parse_opt(int key, char *arg, struct argp_state *state)
{
	struct arguments *arguments = state->input;
	int error = 0;
	__u16 temp;

	switch (key) {
	case ARGP_POOL6:
		arguments->mode = MODE_POOL6;
		break;
	case ARGP_POOL4:
		arguments->mode = MODE_POOL4;
		break;
	case ARGP_BIB:
		arguments->mode = MODE_BIB;
		break;
	case ARGP_SESSION:
		arguments->mode = MODE_SESSION;
		break;
	case ARGP_FILTERING:
		arguments->mode = MODE_FILTERING;
		break;
	case ARGP_TRANSLATE:
		arguments->mode = MODE_TRANSLATE;
		break;

	case ARGP_DISPLAY:
		arguments->operation = OP_DISPLAY;
		break;
	case ARGP_ADD:
		arguments->operation = OP_ADD;
		break;
	case ARGP_REMOVE:
		arguments->operation = OP_REMOVE;
		break;

	case ARGP_UDP:
		arguments->udp = true;
		break;
	case ARGP_TCP:
		arguments->tcp = true;
		break;
	case ARGP_ICMP:
		arguments->icmp = true;
		break;

	case ARGP_ADDRESS:
		error = str_to_addr4(arg, &arguments->pool4_addr);
		arguments->pool4_addr_set = true;
		break;
	case ARGP_PREFIX:
		error = str_to_prefix(arg, &arguments->pool6_prefix);
		arguments->pool6_prefix_set = true;
		break;
//	case ARGP_STATIC:
//		arguments->static_entries = true;
//		break;
//	case ARGP_DYNAMIC:
//		arguments->dynamic_entries = true;
//		break;
//
//	case ARGP_IPV6:
//		error = str_to_addr6_port(arg, &arguments->bib_addr6);
//		arguments->bib_addr6_set = true;
//		break;
//	case ARGP_IPV4:
//		error = str_to_addr4_port(arg, &arguments->bib_addr4);
//		arguments->bib_addr4_set = true;
//		break;
	case ARGP_REMOTE6:
		error = str_to_addr6_port(arg, &arguments->session_pair6.remote);
		arguments->session_pair6_remote_set = true;
		break;
	case ARGP_LOCAL6:
		error = str_to_addr6_port(arg, &arguments->session_pair6.local);
		arguments->session_pair6_local_set = true;
		break;
	case ARGP_LOCAL4:
		error = str_to_addr4_port(arg, &arguments->session_pair4.local);
		arguments->session_pair4_local_set = true;
		break;
	case ARGP_REMOTE4:
		error = str_to_addr4_port(arg, &arguments->session_pair4.remote);
		arguments->session_pair4_remote_set = true;
		break;

	case ARGP_DROP_ADDR:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= DROP_BY_ADDR_MASK;
		error = str_to_bool(arg, &arguments->filtering.drop_by_addr);
		break;
	case ARGP_DROP_INFO:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= DROP_ICMP6_INFO_MASK;
		error = str_to_bool(arg, &arguments->filtering.drop_icmp6_info);
		break;
//	case ARGP_DROP_TCP:
//		arguments->mode = MODE_FILTERING;
//		arguments->operation |= DROP_EXTERNAL_TCP_MASK;
//		error = str_to_bool(arg, &arguments->filtering.drop_external_tcp);
//		break;
	case ARGP_UDP_TO:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= UDP_TIMEOUT_MASK;
		error = str_to_u16(arg, &temp, UDP_MIN, 0xFFFF);
		arguments->filtering.to.udp = temp;
		break;
	case ARGP_ICMP_TO:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= ICMP_TIMEOUT_MASK;
		error = str_to_u16(arg, &temp, 0, 0xFFFF);
		arguments->filtering.to.icmp = temp;
		break;
	case ARGP_TCP_TO:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= TCP_EST_TIMEOUT_MASK;
		error = str_to_u16(arg, &temp, TCP_EST, 0xFFFF);
		arguments->filtering.to.tcp_est = temp;
		break;
	case ARGP_TCP_TRANS_TO:
		arguments->mode = MODE_FILTERING;
		arguments->operation |= TCP_TRANS_TIMEOUT_MASK;
		error = str_to_u16(arg, &temp, TCP_TRANS, 0xFFFF);
		arguments->filtering.to.tcp_trans = temp;
		break;

	case ARGP_HEAD:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= SKB_HEAD_ROOM_MASK;
		error = str_to_u16(arg, &arguments->translate.skb_head_room, 0, 0xFFFF);
		break;
	case ARGP_TAIL:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= SKB_TAIL_ROOM_MASK;
		error = str_to_u16(arg, &arguments->translate.skb_tail_room, 0, 0xFFFF);
		break;
	case ARGP_RESET_TCLASS:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= RESET_TCLASS_MASK;
		error = str_to_bool(arg, &arguments->translate.reset_traffic_class);
		break;
	case ARGP_RESET_TOS:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= RESET_TOS_MASK;
		error = str_to_bool(arg, &arguments->translate.reset_tos);
		break;
	case ARGP_NEW_TOS:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= NEW_TOS_MASK;
		error = str_to_u8(arg, &arguments->translate.new_tos, 0, 0xFF);
		break;
	case ARGP_DF:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= DF_ALWAYS_ON_MASK;
		error = str_to_bool(arg, &arguments->translate.df_always_on);
		break;
	case ARGP_BUILD_ID:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= BUILD_IPV4_ID_MASK;
		error = str_to_bool(arg, &arguments->translate.build_ipv4_id);
		break;
	case ARGP_LOWER_MTU_FAIL:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= LOWER_MTU_FAIL_MASK;
		error = str_to_bool(arg, &arguments->translate.lower_mtu_fail);
		break;
	case ARGP_NEXT_MTU6:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= IPV6_NEXTHOP_MTU_MASK;
		error = str_to_u16(arg, &arguments->translate.ipv6_nexthop_mtu, 0, 0xFFFF);
		break;
	case ARGP_NEXT_MTU4:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= IPV4_NEXTHOP_MTU_MASK;
		error = str_to_u16(arg, &arguments->translate.ipv4_nexthop_mtu, 0, 0xFFFF);
		break;
	case ARGP_PLATEAUS:
		arguments->mode = MODE_TRANSLATE;
		arguments->operation |= MTU_PLATEAUS_MASK;
		error = str_to_u16_array(arg, &arguments->translate.mtu_plateaus,
				&arguments->translate.mtu_plateau_count);
		break;

	default:
		return ARGP_ERR_UNKNOWN;
	}

	return error;
}
Beispiel #9
0
/******************************************************************************
 * @brief    Read the VIC model global control file, getting values for
 *           global parameters, model options, and debugging controls.
 *****************************************************************************/
void
get_global_param(FILE *gp)
{
    extern option_struct       options;
    extern global_param_struct global_param;
    extern param_set_struct    param_set;
    extern filenames_struct    filenames;

    char                       cmdstr[MAXSTRING];
    char                       optstr[MAXSTRING];
    char                       flgstr[MAXSTRING];
    char                       flgstr2[MAXSTRING];

    /** Read through global control file to find parameters **/

    rewind(gp);
    fgets(cmdstr, MAXSTRING, gp);

    while (!feof(gp)) {
        if (cmdstr[0] != '#' && cmdstr[0] != '\n' && cmdstr[0] != '\0') {
            sscanf(cmdstr, "%s", optstr);

            /* Handle case of comment line in which '#' is indented */
            if (optstr[0] == '#') {
                fgets(cmdstr, MAXSTRING, gp);
                continue;
            }

            /*************************************
               Get Model Global Parameters
            *************************************/
            if (strcasecmp("NLAYER", optstr) == 0) {
                sscanf(cmdstr, "%*s %zu", &options.Nlayer);
            }
            else if (strcasecmp("NODES", optstr) == 0) {
                sscanf(cmdstr, "%*s %zu", &options.Nnode);
            }
            else if (strcasecmp("OUT_TIME_UNITS", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                global_param.time_units = str_to_timeunits(flgstr);
            }
            else if (strcasecmp("FULL_ENERGY", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.FULL_ENERGY = str_to_bool(flgstr);
                if (options.FULL_ENERGY == false) {
                    log_warn("FULL_ENERGY is set to FALSE. Please double check "
                             "that this is the setting you intended.");
                }
            }
            else if (strcasecmp("FROZEN_SOIL", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.FROZEN_SOIL = str_to_bool(flgstr);
                // TODO: move these steps to a option validation
                if (options.FROZEN_SOIL) {
                    options.QUICK_FLUX = false;
                }
                else {
                    options.IMPLICIT = false;
                    options.EXP_TRANS = false;
                }
            }
            else if (strcasecmp("QUICK_FLUX", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.QUICK_FLUX = str_to_bool(flgstr);
            }
            else if (strcasecmp("QUICK_SOLVE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.QUICK_SOLVE = str_to_bool(flgstr);
            }
            else if ((strcasecmp("NOFLUX",
                                 optstr) == 0) ||
                     (strcasecmp("NO_FLUX", optstr) == 0)) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("TRUE", flgstr) == 0) {
                    options.NOFLUX = str_to_bool(flgstr);
                }
            }
            else if (strcasecmp("IMPLICIT", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.IMPLICIT = str_to_bool(flgstr);
            }
            else if (strcasecmp("EXP_TRANS", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.EXP_TRANS = str_to_bool(flgstr);
            }
            else if (strcasecmp("SNOW_DENSITY", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("DENS_SNTHRM", flgstr) == 0) {
                    options.SNOW_DENSITY = DENS_SNTHRM;
                }
                else if (strcasecmp("DENS_BRAS", flgstr) == 0) {
                    options.SNOW_DENSITY = DENS_BRAS;
                }
                else {
                    log_err("Unknown SNOW_DENSITY option: %s", flgstr);
                }
            }
            else if (strcasecmp("BLOWING", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING = str_to_bool(flgstr);
            }
            else if (strcasecmp("BLOWING_VAR_THRESHOLD", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING_VAR_THRESHOLD = str_to_bool(flgstr);
            }
            else if (strcasecmp("BLOWING_CALC_PROB", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING_CALC_PROB = str_to_bool(flgstr);
            }
            else if (strcasecmp("BLOWING_SIMPLE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING_SIMPLE = str_to_bool(flgstr);
            }
            else if (strcasecmp("BLOWING_FETCH", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING_FETCH = str_to_bool(flgstr);
            }
            else if (strcasecmp("BLOWING_SPATIAL_WIND", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.BLOWING_SPATIAL_WIND = str_to_bool(flgstr);
            }
            else if (strcasecmp("CORRPREC", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.CORRPREC = str_to_bool(flgstr);
            }
            else if (strcasecmp("CLOSE_ENERGY", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.CLOSE_ENERGY = str_to_bool(flgstr);
            }
            else if (strcasecmp("COMPUTE_TREELINE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FALSE", flgstr) == 0) {
                    options.COMPUTE_TREELINE = false;
                }
                else {
                    options.COMPUTE_TREELINE = true;
                    options.AboveTreelineVeg = atoi(flgstr);
                }
            }
            else if (strcasecmp("AERO_RESIST_CANSNOW", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("AR_406", flgstr) == 0) {
                    options.AERO_RESIST_CANSNOW = AR_406;
                }
                else if (strcasecmp("AR_406_LS", flgstr) == 0) {
                    options.AERO_RESIST_CANSNOW = AR_406_LS;
                }
                else if (strcasecmp("AR_406_FULL", flgstr) == 0) {
                    options.AERO_RESIST_CANSNOW = AR_406_FULL;
                }
                else if (strcasecmp("AR_410", flgstr) == 0) {
                    options.AERO_RESIST_CANSNOW = AR_410;
                }
                else {
                    log_err("Unknown AERO_RESIST_CANSNOW option: %s", flgstr);
                }
            }
            else if (strcasecmp("GRND_FLUX_TYPE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("GF_406", flgstr) == 0) {
                    options.GRND_FLUX_TYPE = GF_406;
                }
                else if (strcasecmp("GF_410", flgstr) == 0) {
                    options.GRND_FLUX_TYPE = GF_410;
                }
                else {
                    log_err("Unknown GRND_FLUX_TYPE option: %s", flgstr);
                }
            }
            else if (strcasecmp("SPATIAL_FROST", optstr) == 0) {
                sscanf(cmdstr, "%*s %s %s", flgstr, flgstr2);
                if (strcasecmp("TRUE", flgstr) == 0) {
                    options.SPATIAL_FROST = true;
                    options.Nfrost = atoi(flgstr2);
                }
                else {
                    options.SPATIAL_FROST = false;
                }
            }
            else if (strcasecmp("SPATIAL_SNOW", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.SPATIAL_SNOW = str_to_bool(flgstr);
            }
            else if (strcasecmp("TFALLBACK", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.TFALLBACK = str_to_bool(flgstr);
            }
            else if (strcasecmp("SHARE_LAYER_MOIST", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.SHARE_LAYER_MOIST = str_to_bool(flgstr);
            }
            else if (strcasecmp("CANOPY_LAYERS", optstr) == 0) {
                sscanf(cmdstr, "%*s %zu", &options.Ncanopy);
            }
            else if (strcasecmp("CARBON", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.CARBON = str_to_bool(flgstr);
            }
            else if (strcasecmp("RC_MODE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("RC_PHOTO", flgstr) == 0) {
                    options.RC_MODE = RC_PHOTO;
                }
                else if (strcasecmp("RC_JARVIS", flgstr) == 0) {
                    options.RC_MODE = RC_JARVIS;
                }
                else {
                    log_err("Unknown RC_MODE option: %s", flgstr);
                }
            }

            /*************************************
               Define log directory
            *************************************/
            else if (strcasecmp("LOG_DIR", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", filenames.log_path);
            }
            else if (strcasecmp("INIT_STATE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FALSE", flgstr) == 0) {
                    options.INIT_STATE = false;
                }
                else {
                    options.INIT_STATE = true;
                    strcpy(filenames.init_state.nc_filename, flgstr);
                }
            }
            // Define state file format
            else if (strcasecmp("STATE_FORMAT", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("NETCDF3_CLASSIC", flgstr) == 0) {
                    options.STATE_FORMAT = NETCDF3_CLASSIC;
                }
                else if (strcasecmp("NETCDF3_64BIT_OFFSET", flgstr) == 0) {
                    options.STATE_FORMAT = NETCDF3_64BIT_OFFSET;
                }
                else if (strcasecmp("NETCDF4_CLASSIC", flgstr) == 0) {
                    options.STATE_FORMAT = NETCDF4_CLASSIC;
                }
                else if (strcasecmp("NETCDF4", flgstr) == 0) {
                    options.STATE_FORMAT = NETCDF4;
                }
                else {
                    log_err("STATE_FORMAT must be either NETCDF3_CLASSIC, "
                            "NETCDF3_64BIT_OFFSET, NETCDF4_CLASSIC, or NETCDF4.");
                }
            }

            /*************************************
               Define parameter files
            *************************************/

            else if (strcasecmp("CONSTANTS", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", filenames.constants);
            }
            else if (strcasecmp("DOMAIN", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", filenames.domain.nc_filename);
            }
            else if (strcasecmp("DOMAIN_TYPE", optstr) == 0) {
                get_domain_type(cmdstr);
            }
            else if (strcasecmp("PARAMETERS", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", filenames.params.nc_filename);
            }
            else if (strcasecmp("ARNO_PARAMS", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("TRUE", flgstr) == 0) {
                    log_err("Please change \"ARNO_PARAMS TRUE\" to \"BASEFLOW "
                            "NIJSSEN2001\" in your global parameter file.");
                }
                else {
                    log_err("Please change \"ARNO_PARAMS FALSE\" to \"BASEFLOW "
                            "ARNO\" in your global parameter file.");
                }
            }
            else if (strcasecmp("NIJSSEN2001_BASEFLOW", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("TRUE", flgstr) == 0) {
                    log_err("Please change \"NIJSSEN2001_BASEFLOW TRUE\" to "
                            "\"BASEFLOW NIJSSEN2001\" in your global "
                            "parameter file.");
                }
                else {
                    log_err("Please change \"NIJSSEN2001_BASEFLOW FALSE\" to "
                            "\"BASEFLOW ARNO\" in your global parameter file.");
                }
            }
            else if (strcasecmp("BASEFLOW", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("NIJSSEN2001", flgstr) == 0) {
                    options.BASEFLOW = NIJSSEN2001;
                }
                else if (strcasecmp("ARNO", flgstr) == 0) {
                    options.BASEFLOW = ARNO;
                }
                else {
                    log_err("Unknown BASEFLOW option: %s", flgstr);
                }
            }
            else if (strcasecmp("JULY_TAVG_SUPPLIED", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.JULY_TAVG_SUPPLIED = str_to_bool(flgstr);
            }
            else if (strcasecmp("ORGANIC_FRACT", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.ORGANIC_FRACT = str_to_bool(flgstr);
            }
            else if (strcasecmp("VEGLIB_PHOTO", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.VEGLIB_PHOTO = str_to_bool(flgstr);
            }
            else if (strcasecmp("LAI_SRC", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FROM_VEGHIST", flgstr) == 0) {
                    options.LAI_SRC = FROM_VEGHIST;
                }
                else if (strcasecmp("FROM_VEGPARAM", flgstr) == 0) {
                    options.LAI_SRC = FROM_VEGPARAM;
                }
                else if (strcasecmp("FROM_VEGLIB", flgstr) == 0) {
                    options.LAI_SRC = FROM_VEGLIB;
                }
                else {
                    log_err("Unrecognized value of LAI_SRC in the global "
                            "control file.");
                }
            }
            else if (strcasecmp("FCAN_SRC", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FROM_VEGHIST", flgstr) == 0) {
                    options.FCAN_SRC = FROM_VEGHIST;
                }
                else if (strcasecmp("FROM_VEGPARAM", flgstr) == 0) {
                    options.FCAN_SRC = FROM_VEGPARAM;
                }
                else if (strcasecmp("FROM_VEGLIB", flgstr) == 0) {
                    options.FCAN_SRC = FROM_VEGLIB;
                }
                else if (strcasecmp("FROM_DEFAULT", flgstr) == 0) {
                    options.FCAN_SRC = FROM_DEFAULT;
                }
                else {
                    log_err("Unrecognized value of FCAN_SRC in the global "
                            "control file.");
                }
            }
            else if (strcasecmp("ALB_SRC", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FROM_VEGHIST", flgstr) == 0) {
                    options.ALB_SRC = FROM_VEGHIST;
                }
                else if (strcasecmp("FROM_VEGPARAM", flgstr) == 0) {
                    options.ALB_SRC = FROM_VEGPARAM;
                }
                else if (strcasecmp("FROM_VEGLIB", flgstr) == 0) {
                    options.ALB_SRC = FROM_VEGLIB;
                }
                else {
                    log_err("Unrecognized value of ALB_SRC in the global "
                            "control file.");
                }
            }
            else if (strcasecmp("SNOW_BAND", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (str_to_bool(flgstr)) {
                    options.SNOW_BAND = SNOW_BAND_TRUE_BUT_UNSET;
                }
            }
            else if (strcasecmp("LAKES", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                if (strcasecmp("FALSE", flgstr) == 0) {
                    options.LAKES = false;
                }
                else {
                    options.LAKES = true;
                }
            }
            else if (strcasecmp("LAKE_PROFILE", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", flgstr);
                options.LAKE_PROFILE = str_to_bool(flgstr);
            }

            /*************************************
               Define output files
            *************************************/
            else if (strcasecmp("RESULT_DIR", optstr) == 0) {
                sscanf(cmdstr, "%*s %s", filenames.result_dir);
            }

            /*************************************
               Define output file contents
            *************************************/
            else if (strcasecmp("OUTFILE", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("OUTVAR", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("AGGFREQ", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("OUTPUT_STEPS_PER_DAY", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("SKIPYEAR", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("COMPRESS", optstr) == 0) {
                ; // do nothing
            }
            else if (strcasecmp("OUT_FORMAT", optstr) == 0) {
                ; // do nothing
            }
            // vegetation history not yet implemented in image mode
            // TBD: feature in VIC 4.2 that has been ported to classic
            // mode, but that does not exist in image mode (yet)
            else if (strcasecmp("ALBEDO", optstr) == 0 ||
                     strcasecmp("LAI", optstr) == 0 ||
                     strcasecmp("FCANOPY", optstr) == 0) {
                log_err("Time-varying vegetation parameters not implemented "
                        "in CESM driver");
            }

            /***********************************
               Unrecognized Global Parameter Flag
            ***********************************/
            else {
                log_warn("Unrecognized option in the global parameter file: %s"
                         "\n - check your spelling", optstr);
            }
        }
        fgets(cmdstr, MAXSTRING, gp);
    }

    // Output major options
    display_current_settings(DISP_VERSION);
}
static void
handle_context_element (ParserState *parser_state)
{
	gchar *id, *parent_id, *style_ref;
	xmlChar *ref, *sub_pattern, *tmp;
	int is_empty;
	gboolean success;
	gboolean ignore_style = FALSE;
	GtkSourceContextRefOptions options = 0;
	GSList *context_classes;

	GError *tmp_error = NULL;

	g_return_if_fail (parser_state->error == NULL);

	ref = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "ref");
	sub_pattern = xmlTextReaderGetAttribute (parser_state->reader,
						 BAD_CAST "sub-pattern");

	tmp = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "ignore-style");
	if (tmp != NULL && str_to_bool (tmp))
		ignore_style = TRUE;
	xmlFree (tmp);

	tmp = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "style-ref");
	if (tmp == NULL || id_is_decorated ((gchar*) tmp, NULL))
		style_ref = g_strdup ((gchar*) tmp);
	else
		style_ref = decorate_id (parser_state, (gchar*) tmp);
	xmlFree (tmp);

	if (ignore_style && ref == NULL)
	{
		g_set_error (&parser_state->error,
			     PARSER_ERROR,
			     PARSER_ERROR_WRONG_STYLE,
			     "ignore-style used not in a reference to context");

		xmlFree (ref);
		g_free (style_ref);

		return;
	}

	if (ignore_style)
	{
		options |= GTK_SOURCE_CONTEXT_IGNORE_STYLE;

		if (style_ref != NULL)
			g_warning ("in file %s: style-ref and ignore-style used simultaneously",
				   parser_state->filename);
	}

	/* XXX */
	if (!ignore_style && style_ref != NULL &&
	    g_hash_table_lookup (parser_state->styles_mapping, style_ref) == NULL)
	{
		g_warning ("in file %s: style '%s' not defined", parser_state->filename, style_ref);
	}

	context_classes = parse_classes (parser_state);

	if (ref != NULL)
	{
		tmp = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "original");
		if (tmp != NULL && str_to_bool (tmp))
			options |= GTK_SOURCE_CONTEXT_REF_ORIGINAL;
		xmlFree (tmp);

		if (style_ref != NULL)
			options |= GTK_SOURCE_CONTEXT_OVERRIDE_STYLE;

		add_ref (parser_state,
		         (gchar*) ref,
		         options,
		         style_ref,
		         &tmp_error);
	}
	else
	{
		char *freeme = NULL;

		tmp = xmlTextReaderGetAttribute (parser_state->reader, BAD_CAST "id");
		if (tmp == NULL)
		{
			freeme = generate_new_id (parser_state);
			tmp = xmlStrdup (BAD_CAST freeme);
		}

		if (id_is_decorated ((gchar*) tmp, NULL))
			id = g_strdup ((gchar*) tmp);
		else
			id = decorate_id (parser_state, (gchar*) tmp);

		g_free (freeme);
		xmlFree (tmp);

		if (parser_state->ctx_data != NULL)
		{
			if (sub_pattern != NULL)
			{
				create_sub_pattern (parser_state,
				                    id,
				                    (gchar *)sub_pattern,
				                    style_ref,
				                    context_classes,
				                    &tmp_error);
			}
			else
			{
				parent_id = g_queue_peek_head (
						parser_state->curr_parents);

				is_empty = xmlTextReaderIsEmptyElement (
						parser_state->reader);

				if (is_empty)
					success = _gtk_source_context_data_define_context (parser_state->ctx_data,
											   id,
											   parent_id,
											   "$^",
											   NULL,
											   NULL,
											   NULL,
											   NULL,
											   0,
											   &tmp_error);
				else
					success = create_definition (parser_state,
					                             id,
					                             parent_id,
					                             style_ref,
					                             context_classes,
					                             &tmp_error);

				if (success && !is_empty)
				{
					/* Push the new context in the curr_parents
					 * stack only if other contexts can be
					 * defined inside it */
					g_queue_push_head (parser_state->curr_parents,
							   g_strdup (id));
				}
			}
		}

		g_free (id);
	}

	g_slist_free_full (context_classes, (GDestroyNotify)gtk_source_context_class_free);

	g_free (style_ref);
	xmlFree (sub_pattern);
	xmlFree (ref);

	if (tmp_error != NULL)
		g_propagate_error (&parser_state->error, tmp_error);
}
Beispiel #11
0
int process_arg(int option, const char *name, const char *val, priority_t precedence, arg_pass_t pass)
{
    int count = 0;

    (void) precedence;		/* suppress compiler warning */
    (void) pass;		/* suppress compiler warning */

    switch (option) {
    case '?':
	fprintf(stderr, "Unknown option '%s'.\n", name);
	break;

    case 'd':
	flag = M_DUMP;
	count += 1;
	ds_file = val;
	break;

    case O_CONFIG_FILE:
	read_config_file(val, false, false, PR_COMMAND, longopts_bogoutil);
	/*@fallthrough@*/
	/* fall through to suppress reading config files */

    case 'C':
	suppress_config_file = true;
	break;

    case 'k':
	db_cachesize=(uint) atoi(val);
	break;

    case 'l':
	flag = M_LOAD;
	count += 1;
	ds_file = val;
	break;

    case 'm':
	flag = M_MAINTAIN;
	count += 1;
	ds_file = val;
	break;

    case 'p':
	prob = true;
	/*@fallthrough@*/

    case 'w':
	flag = M_WORD;
	count += 1;
	ds_file = val;
	break;

    case O_DB_PRINT_LEAFPAGE_COUNT:
	flag = M_LEAFPAGES;
	count += 1;
	ds_file = val;
	break;

    case O_DB_PRINT_PAGESIZE:
	flag = M_PAGESIZE;
	count += 1;
	ds_file = val;
	break;

    case 'r':
	onlyprint = true;
    case 'R':
	flag = M_ROBX;
	count += 1;
	ds_file = val;
	break;

    case 'u':
	upgrade_wordlist_version = true;
	flag = M_MAINTAIN;
	count += 1;
	ds_file = val;
	break;

    case 'v':
	verbose++;
	break;

    case ':':
	fprintf(stderr, "Option %s requires an argument.\n", name);
	exit(EX_ERROR);

    case 'h':
	help(stdout);
	exit(EX_OK);

    case 'H':
	flag = M_HIST;
	count += 1;
	ds_file = val;
	break;

    case 'V':
	print_version();
	exit(EX_OK);

    case 'x':
	set_debug_mask(val);
	break;

    case 'X':
	set_bogotest(val);
	break;

    case 'a':
	maintain = true;
	thresh_date = string_to_date(val);
	break;

    case 'c':
	maintain = true;
	thresh_count = (uint) atoi(val);
	break;

    case 's':
    {
	unsigned long mi, ma;

	maintain = true;
	    
	if (2 == sscanf(val, "%lu,%lu", &mi, &ma)) {
	    size_min = mi;
	    size_max = ma;
	} else {
	    fprintf(stderr, "syntax error in argument \"%s\" of -s\n.",
		    val);
	    exit(EX_ERROR);
	}
    }
    break;

    case 'n':
	maintain = true;
	replace_nonascii_characters ^= true;
	break;

    case 'y':		/* date as YYYYMMDD */
    {
	YYYYMMDD date = string_to_date(val);
	maintain = true;
	if (date != 0 && date < 19990000) {
	    fprintf(stderr, "Date format for '-y' option is YYYYMMDD\n");
	    exit(EX_ERROR);
	}
	set_date( date );
	break;
    }

    case 'I':
	fpin = fopen(val, "r");
	if (fpin == NULL) {
	    fprintf(stderr, "Can't read file '%s'\n", val);
	    exit(EX_ERROR);
	}
	break;

    case 'O':
	fpo = fopen(val, "wt");
	if (fpo == NULL) {
	    fprintf(stderr, "Can't write file '%s'\n", val);
	    exit(EX_ERROR);
	}
	break;

    case 'D':
	dbgout = stdout;
	break;

    case O_DB_VERIFY:
	flag = M_VERIFY;
	count += 1;
	ds_file = val;
	break;

    case O_UNICODE:
	encoding = str_to_bool(val) ? E_UNICODE : E_RAW;
	break;

    case O_MAX_TOKEN_LEN:
	max_token_len = atoi(val);
	break;

    case O_MIN_TOKEN_LEN:
	min_token_len = atoi(val);
	break;

    case O_MAX_MULTI_TOKEN_LEN:
	max_multi_token_len=atoi(val);
	break;

    case O_MULTI_TOKEN_COUNT:
	multi_token_count=atoi(val);
	break;

    default:
	if (!dsm_options_bogoutil(option, &flag, &count, &ds_file, name, val)) {
	    fprintf(stderr, "Invalid option '%s'\n", name);
	    exit(EX_ERROR);
	}
    }

    return count;
}
/**
 * @brief Read the configuration for the Cache inode layer
 *
 * @param[in]  config Configuration file handle
 * @param[out] param  Read parameters
 *
 * @retval CACHE_INODE_SUCCESS on success.
 * @retval CACHE_INODE_NOT_FOUND if stanza not present
 * @retval CACHE_INODE_INVALID_ARGUMENT otherwise
 */
cache_inode_status_t
cache_inode_read_conf_parameter(config_file_t config,
				cache_inode_parameter_t *param)
{
	int var_max;
	int var_index;
	int err;
	char *key_name;
	char *key_value;
	config_item_t block;

	/* Get the config BLOCK */
	block = config_FindItemByName(config, CONF_LABEL_CACHE_INODE);
	if (block == NULL) {
		LogDebug(COMPONENT_CONFIG,
			 "Cannot read item \"%s\" from configuration file",
			 CONF_LABEL_CACHE_INODE);
		return CACHE_INODE_NOT_FOUND;
	} else if (config_ItemType(block) != CONFIG_ITEM_BLOCK) {
		/* Expected to be a block */
		LogCrit(COMPONENT_CONFIG,
			"Item \"%s\" is expected to be a block",
			CONF_LABEL_CACHE_INODE);
		return CACHE_INODE_INVALID_ARGUMENT;
	}

	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);

		/* Get key's name */
		err = config_GetKeyValue(item, &key_name, &key_value);
		if (err != 0) {
			LogCrit(COMPONENT_CONFIG,
				"Error reading key[%d] from section \"%s\" of "
				"configuration file.",
				var_index, CONF_LABEL_CACHE_INODE);
			return CACHE_INODE_INVALID_ARGUMENT;
		}

		else if (!strcasecmp(key_name, "NParts")) {
			param->nparts = atoi(key_value);
		} else if (!strcasecmp(key_name, "Attr_Expiration_Time")) {
			err =
			    parse_cache_expire(&param->expire_type_attr,
					       &param->grace_period_attr,
					       key_value);
			if (err != CACHE_INODE_SUCCESS)
				return err;
		} else
		    if (!strcasecmp
			(key_name, "Use_Getattr_Directory_Invalidation")) {
			param->getattr_dir_invalidation =
			    str_to_bool(key_value);
		} else if (!strcasecmp(key_name, "Entries_HWMark")) {
			param->entries_hwmark = atoi(key_value);
		} else if (!strcasecmp(key_name, "LRU_Run_Interval")) {
			param->lru_run_interval = atoi(key_value);
		} else if (!strcasecmp(key_name, "Cache_FDs")) {
			param->use_fd_cache = str_to_bool(key_value);
		} else if (!strcasecmp(key_name, "FD_Limit_Percent")) {
			param->fd_limit_percent = atoi(key_value);
		} else if (!strcasecmp(key_name, "FD_HWMark_Percent")) {
			param->fd_hwmark_percent = atoi(key_value);
		} else if (!strcasecmp(key_name, "FD_LWMark_Percent")) {
			param->fd_lwmark_percent = atoi(key_value);
		} else if (!strcasecmp(key_name, "Reaper_Work")) {
			param->reaper_work = atoi(key_value);
		} else if (!strcasecmp(key_name, "Biggest_Window")) {
			param->biggest_window = atoi(key_value);
		} else if (!strcasecmp(key_name, "Required_Progress")) {
			param->required_progress = atoi(key_value);
		} else if (!strcasecmp(key_name, "Futility_Count")) {
			param->futility_count = atoi(key_value);
		} else if (!strcasecmp(key_name, "DebugLevel")
			   || !strcasecmp(key_name, "LogFile")) {
			LogWarn(COMPONENT_CONFIG,
				"Deprecated %s option %s=\'%s\'",
				CONF_LABEL_CACHE_INODE, key_name, key_value);
		} else {
			LogCrit(COMPONENT_CONFIG,
				"Unknown or unsettable key: %s (item %s)",
				key_name, CONF_LABEL_CACHE_INODE);
			return CACHE_INODE_INVALID_ARGUMENT;
		}
	}

	return CACHE_INODE_SUCCESS;
}
Beispiel #13
0
static int
set_param(char *name, char *value)
{
    struct param_ptr *p;
    double ppc;

    if (value == NULL)
	return 0;
    p = search_param(name);
    if (p == NULL)
	return 0;
    switch (p->type) {
    case P_INT:
	if (atoi(value) >= 0)
	    *(int *)p->varptr = (p->inputtype == PI_ONOFF)
		? str_to_bool(value, *(int *)p->varptr) : atoi(value);
	break;
    case P_NZINT:
	if (atoi(value) > 0)
	    *(int *)p->varptr = atoi(value);
	break;
    case P_SHORT:
	*(short *)p->varptr = (p->inputtype == PI_ONOFF)
	    ? str_to_bool(value, *(short *)p->varptr) : atoi(value);
	break;
    case P_CHARINT:
	*(char *)p->varptr = (p->inputtype == PI_ONOFF)
	    ? str_to_bool(value, *(char *)p->varptr) : atoi(value);
	break;
    case P_CHAR:
	*(char *)p->varptr = value[0];
	break;
    case P_STRING:
	*(char **)p->varptr = value;
	break;
#if defined(USE_SSL) && defined(USE_SSL_VERIFY)
    case P_SSLPATH:
	if (value != NULL && value[0] != '\0')
	    *(char **)p->varptr = rcFile(value);
	else
	    *(char **)p->varptr = NULL;
	ssl_path_modified = 1;
	break;
#endif
#ifdef USE_COLOR
    case P_COLOR:
	*(int *)p->varptr = str_to_color(value);
	break;
#endif
#ifdef USE_M17N
    case P_CODE:
	*(wc_ces *) p->varptr =
	    wc_guess_charset_short(value, *(wc_ces *) p->varptr);
	break;
#endif
    case P_PIXELS:
	ppc = atof(value);
	if (ppc >= MINIMUM_PIXEL_PER_CHAR && ppc <= MAXIMUM_PIXEL_PER_CHAR * 2)
	    *(double *)p->varptr = ppc;
	break;
    case P_SCALE:
	ppc = atof(value);
	if (ppc >= 10 && ppc <= 1000)
	    *(double *)p->varptr = ppc;
	break;
    }
    return 1;
}
  OpspacePlanarController * OpspacePlanarController::
  create(std::string const & param_root,
	 jspace::Vector const & default_kp,
	 jspace::Vector const & default_kd)
  {
    ros::NodeHandle nn("~");
    OpspacePlanarController * controller(0);
    
    try {
      std::string q1_name;
      if ( ! nn.getParam(param_root + "/q1_name", q1_name)) {
	throw std::runtime_error("missing q1_name parameter");
      }
      
      std::string tmp;
      bool q1_inverted(false);
      if (nn.getParam(param_root + "/q1_inverted", tmp)) {
	q1_inverted = str_to_bool(param_root + "/q1_inverted", tmp, false);
      }
      
      double l1_length;
      if ( ! nn.getParam(param_root + "/l1_length", l1_length)) {
	throw std::runtime_error("missing l1_length parameter");
      }

      std::string q2_name;
      if ( ! nn.getParam(param_root + "/q2_name", q2_name)) {
	throw std::runtime_error("missing q2_name parameter");
      }
      
      bool q2_inverted(false);
      if (nn.getParam(param_root + "/q2_inverted", tmp)) {
	q2_inverted = str_to_bool(param_root + "/q2_inverted", tmp, false);
      }
      
      double l2_length;
      if ( ! nn.getParam(param_root + "/l2_length", l2_length)) {
	throw std::runtime_error("missing l2_length parameter");
      }
      
      double op_kp;
      if ( ! nn.getParam(param_root + "/op_kp", op_kp)) {
	throw std::runtime_error("missing op_kp parameter");
      }
      
      double op_kd;
      if ( ! nn.getParam(param_root + "/op_kd", op_kd)) {
	throw std::runtime_error("missing op_kd parameter");
      }
      
      double op_vmax;
      if ( ! nn.getParam(param_root + "/op_vmax", op_vmax)) {
	throw std::runtime_error("missing op_vmax parameter");
      }
      
      controller = new OpspacePlanarController(q1_name, q1_inverted, l1_length,
					       q2_name, q2_inverted, l2_length,
					       op_kp, op_kd, op_vmax,
					       default_kp, default_kd);
    }
    
    catch (std::exception const & ee) {
      ROS_ERROR ("OpspacePlanarController::create(`%s'): EXCEPTION: %s", param_root.c_str(), ee.what());
      delete controller;
      controller = 0;
    }
    
    return controller;
  }
static bool process_config_parameter(const parm_desc *arg, char *val, priority_t precedence)
/* returns true if ok, false if error */
{
    bool ok = true;
    if (arg->addr.v == NULL)
       return ok;
    switch (arg->type)
    {
       case CP_BOOLEAN:
           {
               *arg->addr.b = str_to_bool(val);
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> %s\n", arg->name,
                           *arg->addr.b ? "Yes" : "No");
               break;
           }
       case CP_INTEGER:
           {
               remove_comment(val);
               if (!xatoi(arg->addr.i, val))
                   return false;
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> %d\n", arg->name, *arg->addr.i);
               break;
           }
       case CP_DOUBLE:
           {
               remove_comment(val);
               if (!xatof(arg->addr.d, val))
                   return false;
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> %f\n", arg->name, *arg->addr.d);
               break;
           }
       case CP_CHAR:
           {
               *arg->addr.c = *val;
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> '%c'\n", arg->name, *arg->addr.c);
               break;
           }
       case CP_STRING:
           {
               *arg->addr.s = xstrdup(val);
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> '%s'\n", arg->name, *arg->addr.s);
               break;
           }
       case CP_DIRECTORY:
           {
               char *dir = tildeexpand(val, true);
               if (DEBUG_CONFIG(2))
                   fprintf(dbgout, "%s -> '%s'\n", arg->name, dir);
               if (setup_wordlists(dir, precedence) != 0)
                   exit(EX_ERROR);
                          xfree(dir);
               break;
           }
       case CP_FUNCTION:
       {
           ok = (*arg->addr.f)((unsigned char *)val);
           if (DEBUG_CONFIG(2))
               fprintf(dbgout, "%s -> '%s'\n", arg->name, val);
           break;
       }
       case CP_WORDLIST:
       {
           char c = *val;
           switch (c) {
           case 'c': wl_mode = WL_M_COMBINED; break;
           case 's': wl_mode = WL_M_SEPARATE; break;
           default:
               fprintf(stderr, "Unknown wordlist type - '%s'.\n", val);
               exit(EX_ERROR);
           }
           if (DEBUG_CONFIG(2))
               fprintf(dbgout, "%s -> '%s'\n", arg->name, val);
           break;
       }
       default:
       {
           ok = false;
           break;
       }
    }
    return ok;
}
Beispiel #16
0
void parse_config(const char *conf_file, struct options *opt)
{
	FILE *fh;
	struct buffer line;
	unsigned int lineno = 1;
	int errors = 0;

	/* Journal hasn't been opened yet */
	printf("Reading configuration file at \"%s\"...\n", conf_file);

	if (opt->strict) {
		security_conf_file_check(conf_file);
	}

	fh = fopen(conf_file, "r");
	if (fh == NULL) {
		fprintf(stderr, "Unable to open configuration file \"%s\": %s.\n",
			conf_file, strerror(errno));
		cleanup(EXIT_IO, true);
	}

#if DEBUG
	printf("Raw key/value pairs from config file:\n");
#endif /* DEBUG */

	while (file_read_line(fh, conf_file, &lineno, &line)) {
		struct buffer key, val;
		bool success;
		int ch;

		if (!read_key_and_value(conf_file, lineno, &line, &key, &val)) {
			if (key.length) {
				errors++;
			}

			continue;
		}

		/* Check each possible option */
		if (!strcasecmp(key.data, "Daemonize")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->daemonize = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "TransportProtocol")) {
			if (!strcasecmp(val.data, "tcp")) {
				opt->tproto = PROTOCOL_TCP;
			} else if (!strcasecmp(val.data, "udp")) {
				opt->tproto = PROTOCOL_UDP;
			} else {
				fprintf(stderr, "%s:%d: invalid transport protocol: \"%s\"\n",
					conf_file, lineno, val.data);
				errors++;
			}
		} else if (!strcasecmp(key.data, "InternetProtocol")) {
			if (!strcasecmp(val.data, "both")) {
				opt->iproto = PROTOCOL_BOTH;
			} else if (!strcasecmp(val.data, "ipv4")) {
				opt->iproto = PROTOCOL_IPv4;
			} else if (!strcasecmp(val.data, "ipv6")) {
				opt->iproto = PROTOCOL_IPv6;
			} else {
				fprintf(stderr, "%s:%d: invalid internet protocol: \"%s\"\n",
					conf_file, lineno, val.data);
				errors++;
			}
		} else if (!strcasecmp(key.data, "Port")) {
			/* atoi is ok because it returns 0 in case of failure, and 0 isn't a valid port */
			int port = atoi(val.data);
			if (0 >= port || port > PORT_MAX) {
				fprintf(stderr, "%s:%d: invalid port number: \"%s\"\n",
					conf_file, lineno, val.data);
				errors++;
			} else {
				opt->port = port;
			}
		} else if (!strcasecmp(key.data, "StrictChecking")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->strict = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "DropPrivileges")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->drop_privileges = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "PidFile")) {
			if (!strcmp(val.data, "none")) {
				opt->pid_file = NULL;
				continue;
			}

			opt->pid_file = strdup(val.data);
			if (unlikely(!opt->pid_file)) {
				perror("Unable to allocate memory for config value");
				fclose(fh);
				cleanup(EXIT_MEMORY, true);
			}
		} else if (!strcasecmp(key.data, "RequirePidFile")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->require_pidfile = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "JournalFile")) {
			if (!strcmp(val.data, "-")) {
				opt->journal_file = NULL;
			} else if (strcmp(val.data, "none") != 0) {
				opt->journal_file = strdup(val.data);
				if (unlikely(!opt->journal_file)) {
					perror("Unable to allocate memory for config value");
					fclose(fh);
					cleanup(EXIT_MEMORY, true);
				}
			}
		} else if (!strcasecmp(key.data, "QuotesFile")) {
			opt->quotes_file = strdup(val.data);
			if (unlikely(!opt->quotes_file)) {
				perror("Unable to allocate memory for config value");
				fclose(fh);
				cleanup(EXIT_MEMORY, true);
			}
		} else if (!strcasecmp(key.data, "QuoteDivider")) {
			if (!strcasecmp(val.data, "line")) {
				opt->linediv = DIV_EVERYLINE;
			} else if (!strcasecmp(val.data, "percent")) {
				opt->linediv = DIV_PERCENT;
			} else if (!strcasecmp(val.data, "file")) {
				opt->linediv = DIV_WHOLEFILE;
			} else {
				fprintf(stderr,
					"%s:%d: unsupported division type: \"%s\"\n",
					conf_file, lineno, val.data);
				errors++;
			}
		} else if (!strcasecmp(key.data, "PadQuotes")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->pad_quotes = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "DailyQuotes")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->is_daily = ch;
			} else {
				errors++;
			}
		} else if (!strcasecmp(key.data, "AllowBigQuotes")) {
			ch = str_to_bool(val.data, conf_file, lineno, &success);

			if (likely(success)) {
				opt->allow_big = ch;
			} else {
				errors++;
			}
		} else {
			fprintf(stderr, "%s:%d: unknown conf option: \"%s\"\n",
				conf_file, lineno, key.data);
			errors++;
		}

		lineno++;
	}

	fclose(fh);

	if (opt->strict && errors) {
		fprintf(stderr,
			"Your configuration file has %d issue%s. The daemon will not start.\n"
			"(To disable this behavior, use the --lax flag when running).\n",
			errors, PLURAL(errors));
		cleanup(EXIT_SECURITY, true);
	}
}
Beispiel #17
0
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);
}