Пример #1
0
bool_t getBoolConf(param_t param)
{
	config_setting_t *setting = NULL;

	switch (param) {
		case ALLOW_TEXTMESSAGE:
			setting = config_lookup(&configuration, "allow_textmessage");
			if (!setting)
				return true;
			else
				return config_setting_get_bool(setting);
			break;
		case ENABLE_BAN:
			setting = config_lookup(&configuration, "enable_ban");
			if (!setting)
				return false;
			else
				return config_setting_get_bool(setting);
			break;
		case SYNC_BANFILE:
			setting = config_lookup(&configuration, "sync_banfile");
			if (!setting)
				return false;
			else
				return config_setting_get_bool(setting);
			break;
		default:
			doAssert(false);
	}
}
Пример #2
0
int Conf_getNextChannel(conf_channel_t *chdesc, int index)
{
	config_setting_t *setting = NULL;
	int maxconfig = 64, ret = 0;
	char configstr[maxconfig];

	ret = snprintf(configstr, maxconfig, "channels.[%d].name", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL)
		return -1; /* Required */
	chdesc->name =  config_setting_get_string(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].parent", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL)
		return -1; /* Required */
	chdesc->parent = config_setting_get_string(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].description", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
		chdesc->description = NULL;
	else
		chdesc->description = config_setting_get_string(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].password", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
		chdesc->password = NULL;
	else
		chdesc->password = config_setting_get_string(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].noenter", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
		chdesc->noenter = false;
	else
		chdesc->noenter = config_setting_get_bool(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].silent", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
		chdesc->silent = false;
	else
		chdesc->silent = config_setting_get_bool(setting);

	ret = snprintf(configstr, maxconfig, "channels.[%d].position", index);
	setting = config_lookup(&configuration, configstr);
	if (ret >= maxconfig || ret < 0 || setting == NULL) /* Optional */
		chdesc->position = 0;
	else
		chdesc->position = config_setting_get_int(setting);

	return 0;
}
Пример #3
0
//------------------------------------------------------------------------------
// UWAGA - istniejaca lista czujnikow JEST czyszczona !
// Dzieki temu kolejnosc czujnikow na liscie jest zgodna z kolejnoscia z pliku.
int sensors_load_configuration (config_setting_t *setting)
{
		config_setting_t *sensor_list = NULL, *sensor = NULL, *s = NULL ;
		unsigned int i ;
		const char *s_id = NULL, *s_name = NULL ;
		unsigned int s_res = 9, s_interval = 5 ;
		gboolean s_cached = FALSE ;
		
		sensor_list = config_setting_get_member(setting, "Sensor_List") ;
		
		clear_sensor_list() ;
		
		i=0 ;
		while ((sensor = config_setting_get_elem(sensor_list,i)) != NULL) {
				
				// ten kod powinien chyba byc w t_sensor.c
						s = config_setting_get_member(sensor, "sensor_id") ;
				if (s != NULL) s_id = config_setting_get_string(s) ;
				s = config_setting_get_member(sensor, "name") ;
				if (s != NULL) s_name = config_setting_get_string(s) ;
				s = config_setting_get_member(sensor, "resolution") ;
				if (s != NULL) s_res = config_setting_get_int(s) ;
				s = config_setting_get_member(sensor, "read_interval") ;
				if (s != NULL) s_interval = config_setting_get_int(s) ;
				s = config_setting_get_member(sensor, "cached") ;
				if (s != NULL) s_cached = config_setting_get_bool(s) ;
				
				add_sensor (s_name, s_id, s_res, s_interval, s_cached) ;
				
				i++ ;
		} ;	
		
		rebuild_sensors_tree(FALSE) ;
		return 0 ;
} ;
Пример #4
0
static config_setting_t *interface_group_for(const char *ifname) {
	assert(config_setting_is_list(app_config));

	config_setting_t *default_if_conf = NULL;
	for (int i = 0; i < config_setting_length(app_config); i++) {
		config_setting_t *cur = config_setting_get_elem(app_config, i);

		config_setting_t *cur_ifname = config_setting_get_member(cur, "interface");
		if (cur_ifname != NULL) {
			const char *cur_ifname_str = config_setting_get_string(cur_ifname);
			assert(cur_ifname_str != NULL);
			if (strcmp(cur_ifname_str, ifname) == 0) return cur;
		}

		config_setting_t *cur_is_default = config_setting_get_member(cur, "default");
		if (
			default_if_conf == NULL &&
			cur_is_default != NULL &&
			config_setting_get_bool(cur_is_default)
		) {
			default_if_conf = cur;
		}
	}
	return default_if_conf;
}
Пример #5
0
void config_setting_copy_simple(config_setting_t *parent, const config_setting_t *src)
{
	if (config_setting_is_aggregate(src)) {
		config_setting_copy_aggregate(parent, src);
	}
	else {
		config_setting_t *set;
		
		if( config_setting_get_member(parent, config_setting_name(src)) != NULL )
			return;
		
		if ((set = config_setting_add(parent, config_setting_name(src), config_setting_type(src))) == NULL)
			return;

		if (CONFIG_TYPE_INT == config_setting_type(src)) {
			config_setting_set_int(set, config_setting_get_int(src));
			config_setting_set_format(set, src->format);
		} else if (CONFIG_TYPE_INT64 == config_setting_type(src)) {
			config_setting_set_int64(set, config_setting_get_int64(src));
			config_setting_set_format(set, src->format);
		} else if (CONFIG_TYPE_FLOAT == config_setting_type(src)) {
			config_setting_set_float(set, config_setting_get_float(src));
		} else if (CONFIG_TYPE_STRING == config_setting_type(src)) {
			config_setting_set_string(set, config_setting_get_string(src));
		} else if (CONFIG_TYPE_BOOL == config_setting_type(src)) {
			config_setting_set_bool(set, config_setting_get_bool(src));
		}
	}
}
Пример #6
0
LIBCONFIG_API int config_lookup_bool(const config_t *config, const char *path)
{
  const config_setting_t *s = config_lookup(config, path);
  if(! s)
    return(0);

  return(config_setting_get_bool(s));
}
Пример #7
0
int config_setting_lookup_bool (const config_setting_t * setting, const char *name, int *value)
{
    config_setting_t *member = config_setting_get_member (setting, name);
    if (!member)
        return (CONFIG_FALSE);

    if (config_setting_type (member) != CONFIG_TYPE_BOOL)
        return (CONFIG_FALSE);

    *value = config_setting_get_bool (member);
    return (CONFIG_TRUE);
}
Пример #8
0
int config_lookup_bool(const config_t *config, const char *path, int *value)
{
  const config_setting_t *s = config_lookup(config, path);
  if(! s)
    return(CONFIG_FALSE);

  if(config_setting_type(s) != CONFIG_TYPE_BOOL)
    return(CONFIG_FALSE);

  *value = config_setting_get_bool(s);
  return(CONFIG_TRUE);
}
Пример #9
0
//-----------------------------------------------------------------------------
T_Display *t_display_new_from_configuration(config_setting_t *disp)
{
		T_Display *d ;
		config_setting_t *s, *plot_list, *p ;
		unsigned width = 200, height = 200, i ;
		T_DisplayType type = GRAPHICAL ;
		
		s = config_setting_get_member(disp, "type") ;
		if (s != NULL) type = config_setting_get_int(s) ;
		
		if (type == ALPHANUMERIC)
				d = t_display_new_alphanumeric() ;
		else
				d = t_display_new() ;
		
		s = config_setting_get_member(disp, "width") ;
		if (s != NULL) width = config_setting_get_int(s) ;
		s = config_setting_get_member(disp, "height") ;
		if (s != NULL) height = config_setting_get_int(s) ;
		gtk_widget_set_size_request((GtkWidget*)(d->canvas),width,height) ;
		
		s = config_setting_get_member(disp, "time_range") ;
		if (s != NULL) d->time_range = config_setting_get_int(s) ;
		//s = config_setting_get_member(disp, "last_time") ;	// to chyba usunac 
		//d->last_time = config_setting_get_int(s) ;
		s = config_setting_get_member(disp, "time_step") ;
		if (s != NULL) d->time_step = config_setting_get_int(s) ;
		s = config_setting_get_member(disp, "temp_max") ;
		if (s != NULL) d->temp_max = config_setting_get_int(s) ;
		s = config_setting_get_member(disp, "temp_min") ;
		if (s != NULL) d->temp_min = config_setting_get_int(s) ;
		s = config_setting_get_member(disp, "temp_step") ;
		if (s != NULL) d->temp_step = config_setting_get_int(s) ;
		d->font_size = 10 ;
		s = config_setting_get_member(disp, "font_size") ;
		if (s != NULL) d->font_size = config_setting_get_int(s) ;
		d->show_legend = TRUE ;
		s = config_setting_get_member(disp, "show_legend") ;
		if (s != NULL) d->show_legend = config_setting_get_bool(s) ;
		
		plot_list = config_setting_get_member(disp, "Plots") ;
		i=0 ;
		while ((p = config_setting_get_elem(plot_list,i)) != NULL) {
				
				t_display_add_plot(d,t_plot_new_from_configuration(p)) ;
				
				i++ ;
		} ;		
		
		return d ;
} ;
Пример #10
0
/**
 * Load boolean value from config.
 * @param[in] section Config section.
 * @param[in] option Option name.
 * @param[out] pvalue Value pointer.
 * @return <0 - error. 0 - success. >0 - not found.
 */
static int zcfg_load_bool(const config_setting_t *option, bool *pvalue)
{
    *pvalue = false;

    if (!option) {
        return 1;
    }

    if (CONFIG_TYPE_BOOL != option->type) {
        return -1;
    }

    *pvalue = (bool) config_setting_get_bool(option);

    return 0;
}
Пример #11
0
bool directivaHabilitada(config_t* cf, Ruta_t* estructura_ruta)
{

    const config_setting_t *path_habilitado;
    bool activo = false;
    //formo la ruta que uso en la config
    char tag_ruta_activo[4+4+4+7] = "confRuta";
    char aux[3];
    sprintf(aux, "%d",estructura_ruta->id_ruta);
    strncat(tag_ruta_activo, aux, 3);
    strncat(tag_ruta_activo, ".activo", 7);
    
	path_habilitado= config_lookup(cf, tag_ruta_activo);
	activo = config_setting_get_bool(path_habilitado);

    return activo;
}
Пример #12
0
bool directivaRecursiva(config_t* cf, Ruta_t* estructura_ruta)
{

    const config_setting_t *path_recursivo;
    bool recursivo = false;
    //formo la ruta que uso en la config
    char tag_ruta_recursivo[4+4+4+10] = "confRuta";
    char aux[3];
    sprintf(aux, "%d",estructura_ruta->id_ruta);
    strncat(tag_ruta_recursivo, aux, 3);
    strncat(tag_ruta_recursivo, ".recursivo", 10);
    
	path_recursivo = config_lookup(cf, tag_ruta_recursivo);
	recursivo = config_setting_get_bool(path_recursivo);

    return recursivo;
}
Пример #13
0
int read_system_specific_config(config_t * config)
{
	config_setting_t * system_settings = config_lookup(config, "system");
	if (system_settings == NULL)
	{
		message(LOG_INFO, FACILITY_CONFIG, "System config section is missing in local config\n");
		/* System config is optional section */
		return CONFIG_TRUE;
	}

	config_setting_t * member;

	/*mlock*/
	member = config_setting_get_member(system_settings, "mlock");
	if (member != NULL)
	{
		if (config_setting_type(member) != CONFIG_TYPE_BOOL)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "In system local config mlock key has wrong type, it should be bool.\n");
			return CONFIG_FALSE;
		}
		zfs_config.mlock_zfsd = config_setting_get_bool(member);
	}

	/*metadata_tree_depth*/
	member = config_setting_get_member(system_settings, "metadata_tree_depth");
	if (member != NULL)
	{
		if (config_setting_type(member) != CONFIG_TYPE_INT)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "In system local config metadata_tree_depth key has wrong type, it should be int.\n");
			return CONFIG_FALSE;
		}

		zfs_config.metadata.metadata_tree_depth = config_setting_get_int(member);
		if (!is_valid_metadata_tree_depth(zfs_config.metadata.metadata_tree_depth))
		{
			message(LOG_ERROR, FACILITY_CONFIG, "In system local config metadata_tree_depth key is out of range (min=%d max=%d current=%d).\n",
					MIN_METADATA_TREE_DEPTH, MAX_METADATA_TREE_DEPTH, zfs_config.metadata.metadata_tree_depth);
			return CONFIG_FALSE;
		}
	}

	return CONFIG_TRUE;
}
Пример #14
0
void config_setting_copy_elem(config_setting_t *parent, const config_setting_t *src)
{
	config_setting_t *set = NULL;

	if (config_setting_is_aggregate(src))
		config_setting_copy_aggregate(parent, src);
	else if (CONFIG_TYPE_INT == config_setting_type(src)) {
		set = config_setting_set_int_elem(parent, -1, config_setting_get_int(src));
		config_setting_set_format(set, src->format);
	} else if (CONFIG_TYPE_INT64 == config_setting_type(src)) {
		set = config_setting_set_int64_elem(parent, -1, config_setting_get_int64(src));
		config_setting_set_format(set, src->format);   
	} else if (CONFIG_TYPE_FLOAT == config_setting_type(src)) {
		config_setting_set_float_elem(parent, -1, config_setting_get_float(src));
	} else if (CONFIG_TYPE_STRING == config_setting_type(src)) {
		config_setting_set_string_elem(parent, -1, config_setting_get_string(src));
	} else if (CONFIG_TYPE_BOOL == config_setting_type(src)) {
		config_setting_set_bool_elem(parent, -1, config_setting_get_bool(src));
	}
}
Пример #15
0
static void get_value_libconfig(const config_setting_t *e, void *dest)
{
	int type = config_setting_type(e);
	switch (type) {
	case CONFIG_TYPE_INT:
		*(int *)dest = config_setting_get_int(e);
	case CONFIG_TYPE_INT64:
		*(long long *)dest = config_setting_get_int64(e);
		break;
	case CONFIG_TYPE_STRING:
		dest = (void *)config_setting_get_string(e);
		break;
	case CONFIG_TYPE_BOOL:
		*(int *)dest = config_setting_get_bool(e);
		break;
	case CONFIG_TYPE_FLOAT:
		*(double *)dest = config_setting_get_float(e);
		/* Do nothing, add if needed */
	}
}
Пример #16
0
unsigned char config_get_bool(config_t *config, char *setting, unsigned char initial)
{
	unsigned char value = 0;
	config_setting_t *config_setting = config_lookup(config,setting);

	PRINT_SETTING;

	if (config_setting == NULL)
	{
		PRINT_NOT_FOUND;
		value = initial;
	}
	else
	{
		value = config_setting_get_bool(config_setting);
	}

	PRINT_VALUE_NUM;

	return value;
}
Пример #17
0
/**
 * Loads group configuration from config file into memory.
 * @private
 */
static void read_config(void)
{
	config_setting_t *groups = NULL;
	const char *config_filename = "conf/groups.conf"; // FIXME hardcoded name
	int group_count = 0;
	
	if (conf_read_file(&pc_group_config, config_filename))
		return;

	groups = config_lookup(&pc_group_config, "groups");

	if (groups != NULL) {
		GroupSettings *group_settings = NULL;
		DBIterator *iter = NULL;
		int i, loop = 0;

		group_count = config_setting_length(groups);
		for (i = 0; i < group_count; ++i) {
			int id = 0, level = 0;
			const char *groupname = NULL;
			int log_commands = 0;
			config_setting_t *group = config_setting_get_elem(groups, i);

			if (!config_setting_lookup_int(group, "id", &id)) {
				ShowConfigWarning(group, "pc_groups:read_config: \"groups\" list member #%d has undefined id, removing...", i);
				config_setting_remove_elem(groups, i);
				--i;
				--group_count;
				continue;
			}

			if (id2group(id) != NULL) {
				ShowConfigWarning(group, "pc_groups:read_config: duplicate group id %d, removing...", i);
				config_setting_remove_elem(groups, i);
				--i;
				--group_count;
				continue;
			}

			config_setting_lookup_int(group, "level", &level);
			config_setting_lookup_bool(group, "log_commands", &log_commands);

			if (!config_setting_lookup_string(group, "name", &groupname)) {
				char temp[20];
				config_setting_t *name = NULL;
				snprintf(temp, sizeof(temp), "Group %d", id);
				if ((name = config_setting_add(group, "name", CONFIG_TYPE_STRING)) == NULL ||
				    !config_setting_set_string(name, temp)) {
					ShowError("pc_groups:read_config: failed to set missing group name, id=%d, skipping... (%s:%d)\n",
					          id, config_setting_source_file(group), config_setting_source_line(group));
					continue;
				}
				config_setting_lookup_string(group, "name", &groupname); // Retrieve the pointer
			}

			if (name2group(groupname) != NULL) {
				ShowConfigWarning(group, "pc_groups:read_config: duplicate group name %s, removing...", groupname);
				config_setting_remove_elem(groups, i);
				--i;
				--group_count;
				continue;
			}

			CREATE(group_settings, GroupSettings, 1);
			group_settings->id = id;
			group_settings->level = level;
			group_settings->name = groupname;
			group_settings->log_commands = (bool)log_commands;
			group_settings->inherit = config_setting_get_member(group, "inherit");
			group_settings->commands = config_setting_get_member(group, "commands");
			group_settings->permissions = config_setting_get_member(group, "permissions");
			group_settings->inheritance_done = false;
			group_settings->root = group;
			group_settings->group_pos = i;

			strdb_put(pc_groupname_db, groupname, group_settings);
			idb_put(pc_group_db, id, group_settings);
			
		}
		group_count = config_setting_length(groups); // Save number of groups
		
		// Check if all commands and permissions exist
		iter = db_iterator(pc_group_db);
		for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) {
			config_setting_t *commands = group_settings->commands, *permissions = group_settings->permissions;
			int count = 0, j;

			// Make sure there is "commands" group
			if (commands == NULL)
				commands = group_settings->commands = config_setting_add(group_settings->root, "commands", CONFIG_TYPE_GROUP);
			count = config_setting_length(commands);

			for (j = 0; j < count; ++j) {
				config_setting_t *command = config_setting_get_elem(commands, j);
				const char *name = config_setting_name(command);
				if (!atcommand_exists(name)) {
					ShowConfigWarning(command, "pc_groups:read_config: non-existent command name '%s', removing...", name);
					config_setting_remove(commands, name);
					--j;
					--count;
				}
			}

			// Make sure there is "permissions" group
			if (permissions == NULL)
				permissions = group_settings->permissions = config_setting_add(group_settings->root, "permissions", CONFIG_TYPE_GROUP);
			count = config_setting_length(permissions);

			for(j = 0; j < count; ++j) {
				config_setting_t *permission = config_setting_get_elem(permissions, j);
				const char *name = config_setting_name(permission);
				int p;

				ARR_FIND(0, ARRAYLENGTH(pc_g_permission_name), p, strcmp(pc_g_permission_name[p].name, name) == 0);
				if (p == ARRAYLENGTH(pc_g_permission_name)) {
					ShowConfigWarning(permission, "pc_groups:read_config: non-existent permission name '%s', removing...", name);
					config_setting_remove(permissions, name);
					--p;
					--count;
				}
			}
		}
		dbi_destroy(iter);

		// Apply inheritance
		i = 0; // counter for processed groups
		while (i < group_count) {
			iter = db_iterator(pc_group_db);
			for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) {
				config_setting_t *inherit = NULL,
				                 *commands = group_settings->commands,
					             *permissions = group_settings->permissions;
				int j, inherit_count = 0, done = 0;
				
				if (group_settings->inheritance_done) // group already processed
					continue; 

				if ((inherit = group_settings->inherit) == NULL ||
				    (inherit_count = config_setting_length(inherit)) <= 0) { // this group does not inherit from others
					++i;
					group_settings->inheritance_done = true;
					continue;
				}
				
				for (j = 0; j < inherit_count; ++j) {
					GroupSettings *inherited_group = NULL;
					const char *groupname = config_setting_get_string_elem(inherit, j);

					if (groupname == NULL) {
						ShowConfigWarning(inherit, "pc_groups:read_config: \"inherit\" array member #%d is not a name, removing...", j);
						config_setting_remove_elem(inherit,j);
						continue;
					}
					if ((inherited_group = name2group(groupname)) == NULL) {
						ShowConfigWarning(inherit, "pc_groups:read_config: non-existent group name \"%s\", removing...", groupname);
						config_setting_remove_elem(inherit,j);
						continue;
					}
					if (!inherited_group->inheritance_done)
						continue; // we need to do that group first

					// Copy settings (commands/permissions) that are not defined yet
					if (inherited_group->commands != NULL) {
						int l = 0, commands_count = config_setting_length(inherited_group->commands);
						for (l = 0; l < commands_count; ++l)
							config_setting_copy(commands, config_setting_get_elem(inherited_group->commands, l));
					}

					if (inherited_group->permissions != NULL) {
						int l = 0, permissions_count = config_setting_length(inherited_group->permissions);
						for (l = 0; l < permissions_count; ++l)
							config_setting_copy(permissions, config_setting_get_elem(inherited_group->permissions, l));
					}

					++done; // copied commands and permissions from one of inherited groups
				}
				
				if (done == inherit_count) { // copied commands from all of inherited groups
					++i;
					group_settings->inheritance_done = true; // we're done with this group
				}
			}
			dbi_destroy(iter);

			if (++loop > group_count) {
				ShowWarning("pc_groups:read_config: Could not process inheritance rules, check your config '%s' for cycles...\n",
				            config_filename);
				break;
			}
		} // while(i < group_count)

		// Pack permissions into GroupSettings.e_permissions for faster checking
		iter = db_iterator(pc_group_db);
		for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) {
			config_setting_t *permissions = group_settings->permissions;
			int c, count = config_setting_length(permissions);

			for (c = 0; c < count; ++c) {
				config_setting_t *perm = config_setting_get_elem(permissions, c);
				const char *name = config_setting_name(perm);
				int val = config_setting_get_bool(perm);
				int j;

				if (val == 0) // does not have this permission
					continue;
				ARR_FIND(0, ARRAYLENGTH(pc_g_permission_name), j, strcmp(pc_g_permission_name[j].name, name) == 0);
				group_settings->e_permissions |= pc_g_permission_name[j].permission;
			}
		}
		dbi_destroy(iter);
	}

	ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' groups in '"CL_WHITE"%s"CL_RESET"'.\n", group_count, config_filename);

	
	if( ( pc_group_max = group_count ) ) {
		DBIterator *iter = db_iterator(pc_group_db);
		GroupSettings *group_settings = NULL;
		int* group_ids = aMalloc( pc_group_max * sizeof(int) );
		int i = 0;
		for (group_settings = dbi_first(iter); dbi_exists(iter); group_settings = dbi_next(iter)) {
			group_ids[i++] = group_settings->id;
		}
		
		atcommand_db_load_groups(group_ids);
		
		aFree(group_ids);
		
		dbi_destroy(iter);
	}
}
Пример #18
0
/*********************
return RET_NOK on error
*********************/
ret_code_t entry_copy_config(config_setting_t * source, config_setting_t * dest)
{
	config_setting_t * new_source;
	config_setting_t * new_dest;
	int index = -1;
	int int_value;
	long long long_value;
	double double_value;
	const char * string;

	while((new_source=config_setting_get_elem(source,index+1))!= NULL ) {
		index++;
		if(config_setting_is_group(new_source)) {
			if(!entry_copy_aggregate(new_source,dest,CONFIG_TYPE_GROUP)) {
				return RET_NOK;
			}
		}

		else if(config_setting_is_array(new_source)) {
			if(!entry_copy_aggregate(new_source,dest,CONFIG_TYPE_ARRAY)) {
				return RET_NOK;
			}
		}

		else if(config_setting_is_list(new_source)) {
			if(!entry_copy_aggregate(new_source,dest,CONFIG_TYPE_LIST)) {
				return RET_NOK;
			}
		}

		else {
			switch(config_setting_type(new_source)) {
			case CONFIG_TYPE_INT:
				int_value = config_setting_get_int(new_source);
				new_dest = config_setting_add (dest, config_setting_name(new_source),CONFIG_TYPE_INT);
				config_setting_set_int(new_dest,int_value);
				continue;
			case CONFIG_TYPE_INT64:
				long_value = config_setting_get_int64(new_source);
				new_dest = config_setting_add (dest, config_setting_name(new_source),CONFIG_TYPE_INT64);
				config_setting_set_int64(new_dest,long_value);
				continue;
			case CONFIG_TYPE_FLOAT:
				double_value = config_setting_get_float(new_source);
				new_dest = config_setting_add (dest, config_setting_name(new_source),CONFIG_TYPE_FLOAT);
				config_setting_set_float(new_dest,double_value);
				continue;
			case CONFIG_TYPE_BOOL:
				int_value = config_setting_get_bool(new_source);
				new_dest = config_setting_add (dest, config_setting_name(new_source),CONFIG_TYPE_BOOL);
				config_setting_set_bool(new_dest,int_value);
				continue;
			case CONFIG_TYPE_STRING:
				string = config_setting_get_string(new_source);
				new_dest = config_setting_add (dest, config_setting_name(new_source),CONFIG_TYPE_STRING);
				config_setting_set_string(new_dest,string);
				continue;
			default:
				return RET_NOK;
			}
		}
	}

	return RET_OK;
}
Пример #19
0
int read_versioning_config(config_t * config)
{
	config_setting_t * setting_versioning = config_lookup(config, "versioning");
	if (setting_versioning == NULL)
	{
		message(LOG_INFO, FACILITY_CONFIG, "No versioning section was found in local config.\n");
		return CONFIG_TRUE;
	}

	config_setting_t * member;

	/* versioning::enable */
	member = config_setting_get_member(setting_versioning, "enable");
	if (member != NULL)
	{
		if (config_setting_type(member) != CONFIG_TYPE_BOOL)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "Failed to read versoning::enable, enable has wrong type,\n");
			return CONFIG_FALSE;
		}
		zfs_config.versions.versioning = config_setting_get_bool(member);
	}

	/* versioning::display */
	member = config_setting_get_member(setting_versioning, "display");
	if (member != NULL)
	{
		if (config_setting_type(member) != CONFIG_TYPE_BOOL)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "Failed to read versoning::display, enable has wrong type,\n");
			return CONFIG_FALSE;
		}
		zfs_config.versions.verdisplay = config_setting_get_bool(member);
	}

	/* versioning::retention_age */
	config_setting_t * setting_age = config_setting_get_member(setting_versioning, "retention_age");
	if (setting_age != NULL)
	{
		int rv = read_interval_setting(setting_age, &(zfs_config.versions.retention_age_min),
				&(zfs_config.versions.retention_age_max));
		if (rv != CONFIG_TRUE)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "Failed to read versioning::retention age.\n");
			return CONFIG_FALSE;
		}
	}

	/* versioning::retention_num */
	config_setting_t * setting_num = config_setting_get_member(setting_versioning, "retention_num");
	if (setting_num != NULL)
	{

		int rv = read_interval_setting(setting_num, &(zfs_config.versions.retention_num_min),
				&(zfs_config.versions.retention_num_max));
		if (rv != CONFIG_TRUE)
		{
			message(LOG_ERROR, FACILITY_CONFIG, "Failed to read versioning::retention num.\n");
			return CONFIG_FALSE;
		}
	}

	return CONFIG_TRUE;
}