Example #1
0
static int parse_bearers(DBusMessageIter *iter, GSList **list)
{
    DBusMessageIter array;
    int type, err;

    dbus_message_iter_recurse(iter, &array);

    *list = NULL;

    while ((type = dbus_message_iter_get_arg_type(&array)) !=
            DBUS_TYPE_INVALID) {
        char *bearer_name = NULL;

        if (type != DBUS_TYPE_STRING) {
            g_slist_free(*list);
            *list = NULL;
            return -EINVAL;
        }

        dbus_message_iter_get_basic(&array, &bearer_name);

        err = connman_session_parse_bearers(bearer_name, list);
        if (err < 0) {
            g_slist_free(*list);
            *list = NULL;
            return err;
        }

        dbus_message_iter_next(&array);
    }

    return 0;
}
static int load_policy(GKeyFile *keyfile, const char *groupname,
			struct policy_group *group)
{
	struct connman_session_config *config = group->config;
	char *str, **tokens;
	int i, err = 0;

	group->selinux = g_key_file_get_string(keyfile, groupname,
						"selinux", NULL);

	group->gid = g_key_file_get_string(keyfile, groupname,
						"gid", NULL);

	group->uid = g_key_file_get_string(keyfile, groupname,
						"uid", NULL);

	if (!group->selinux && !group->gid && !group->uid)
		return -EINVAL;

	config->priority = g_key_file_get_boolean(keyfile, groupname,
						"Priority", NULL);

	str = g_key_file_get_string(keyfile, groupname, "RoamingPolicy",
				NULL);
	if (str) {
		config->roaming_policy = connman_session_parse_roaming_policy(str);
		g_free(str);
	}

	str = g_key_file_get_string(keyfile, groupname, "ConnectionType",
				NULL);
	if (str) {
		config->type = connman_session_parse_connection_type(str);
		g_free(str);
	}

	config->ecall = g_key_file_get_boolean(keyfile, groupname,
						"EmergencyCall", NULL);

	str = g_key_file_get_string(keyfile, groupname, "AllowedBearers",
				NULL);
	if (str) {
		tokens = g_strsplit(str, " ", 0);

		for (i = 0; tokens[i]; i++) {
			err = connman_session_parse_bearers(tokens[i],
					&config->allowed_bearers);
			if (err < 0)
				break;
		}

		g_free(str);
		g_strfreev(tokens);
	}

	DBG("group %p selinux %s uid %s gid %s", group, group->selinux,
		group->uid, group->gid);

	return err;
}