|
Packit Service |
b2c451 |
/* vim: set et ts=8 sw=8: */
|
|
Packit Service |
b2c451 |
/* gclue-config.c
|
|
Packit Service |
b2c451 |
*
|
|
Packit Service |
b2c451 |
* Copyright 2013 Red Hat, Inc.
|
|
Packit Service |
b2c451 |
*
|
|
Packit Service |
b2c451 |
* Geoclue is free software; you can redistribute it and/or modify it under
|
|
Packit Service |
b2c451 |
* the terms of the GNU General Public License as published by the Free
|
|
Packit Service |
b2c451 |
* Software Foundation; either version 2 of the License, or (at your option)
|
|
Packit Service |
b2c451 |
* any later version.
|
|
Packit Service |
b2c451 |
*
|
|
Packit Service |
b2c451 |
* Geoclue is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
Packit Service |
b2c451 |
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
Packit Service |
b2c451 |
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
Packit Service |
b2c451 |
* details.
|
|
Packit Service |
b2c451 |
*
|
|
Packit Service |
b2c451 |
* You should have received a copy of the GNU General Public License along
|
|
Packit Service |
b2c451 |
* with Geoclue; if not, write to the Free Software Foundation, Inc.,
|
|
Packit Service |
b2c451 |
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit Service |
b2c451 |
*
|
|
Packit Service |
b2c451 |
* Authors: Zeeshan Ali (Khattak) <zeeshanak@gnome.org>
|
|
Packit Service |
b2c451 |
*/
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
#include <glib/gi18n.h>
|
|
Packit Service |
b2c451 |
#include <config.h>
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
#include "gclue-config.h"
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
#define CONFIG_FILE_PATH SYSCONFDIR "/geoclue/geoclue.conf"
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
/* This class will be responsible for fetching configuration. */
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
struct _GClueConfigPrivate
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GKeyFile *key_file;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
char **agents;
|
|
Packit Service |
b2c451 |
gsize num_agents;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
char *wifi_url;
|
|
Packit Service |
b2c451 |
gboolean wifi_submit;
|
|
Packit Service |
b2c451 |
gboolean enable_nmea_source;
|
|
Packit Service |
b2c451 |
gboolean enable_3g_source;
|
|
Packit Service |
b2c451 |
gboolean enable_cdma_source;
|
|
Packit Service |
b2c451 |
gboolean enable_modem_gps_source;
|
|
Packit Service |
b2c451 |
gboolean enable_wifi_source;
|
|
Packit Service |
b2c451 |
char *wifi_submit_url;
|
|
Packit Service |
b2c451 |
char *wifi_submit_nick;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
GList *app_configs;
|
|
Packit Service |
b2c451 |
};
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
G_DEFINE_TYPE_WITH_CODE (GClueConfig,
|
|
Packit Service |
b2c451 |
gclue_config,
|
|
Packit Service |
b2c451 |
G_TYPE_OBJECT,
|
|
Packit Service |
b2c451 |
G_ADD_PRIVATE (GClueConfig))
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
typedef struct
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
char *id;
|
|
Packit Service |
b2c451 |
gboolean allowed;
|
|
Packit Service |
b2c451 |
gboolean system;
|
|
Packit Service |
b2c451 |
int* users;
|
|
Packit Service |
b2c451 |
gsize num_users;
|
|
Packit Service |
b2c451 |
} AppConfig;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
app_config_free (AppConfig *app_config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
g_free (app_config->id);
|
|
Packit Service |
b2c451 |
g_free (app_config->users);
|
|
Packit Service |
b2c451 |
g_slice_free (AppConfig, app_config);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
gclue_config_finalize (GObject *object)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv = GCLUE_CONFIG (object)->priv;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
g_clear_pointer (&priv->key_file, g_key_file_unref);
|
|
Packit Service |
b2c451 |
g_clear_pointer (&priv->agents, g_strfreev);
|
|
Packit Service |
b2c451 |
g_clear_pointer (&priv->wifi_url, g_free);
|
|
Packit Service |
b2c451 |
g_clear_pointer (&priv->wifi_submit_url, g_free);
|
|
Packit Service |
b2c451 |
g_clear_pointer (&priv->wifi_submit_nick, g_free);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
g_list_foreach (priv->app_configs, (GFunc) app_config_free, NULL);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
G_OBJECT_CLASS (gclue_config_parent_class)->finalize (object);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
gclue_config_class_init (GClueConfigClass *klass)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GObjectClass *object_class;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
object_class = G_OBJECT_CLASS (klass);
|
|
Packit Service |
b2c451 |
object_class->finalize = gclue_config_finalize;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_agent_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
GError *error = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->agents = g_key_file_get_string_list (priv->key_file,
|
|
Packit Service |
b2c451 |
"agent",
|
|
Packit Service |
b2c451 |
"whitelist",
|
|
Packit Service |
b2c451 |
&priv->num_agents,
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_critical ("Failed to read 'agent/whitelist' key: %s",
|
|
Packit Service |
b2c451 |
error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_app_configs (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
const char *known_groups[] = { "agent", "wifi", "3g", "cdma",
|
|
Packit Service |
b2c451 |
"modem-gps", "network-nmea",
|
|
Packit Service |
b2c451 |
NULL };
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
gsize num_groups = 0, i;
|
|
Packit Service |
b2c451 |
char **groups;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
groups = g_key_file_get_groups (priv->key_file, &num_groups);
|
|
Packit Service |
b2c451 |
if (num_groups == 0)
|
|
Packit Service |
b2c451 |
return;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (i = 0; i < num_groups; i++) {
|
|
Packit Service |
b2c451 |
AppConfig *app_config;
|
|
Packit Service |
b2c451 |
int* users;
|
|
Packit Service |
b2c451 |
gsize num_users = 0, j;
|
|
Packit Service |
b2c451 |
gboolean allowed, system;
|
|
Packit Service |
b2c451 |
gboolean ignore = FALSE;
|
|
Packit Service |
b2c451 |
GError *error = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (j = 0; known_groups[j] != NULL; j++)
|
|
Packit Service |
b2c451 |
if (strcmp (groups[i], known_groups[j]) == 0) {
|
|
Packit Service |
b2c451 |
ignore = TRUE;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
continue;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
if (ignore)
|
|
Packit Service |
b2c451 |
continue;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
allowed = g_key_file_get_boolean (priv->key_file,
|
|
Packit Service |
b2c451 |
groups[i],
|
|
Packit Service |
b2c451 |
"allowed",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL)
|
|
Packit Service |
b2c451 |
goto error_out;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
system = g_key_file_get_boolean (priv->key_file,
|
|
Packit Service |
b2c451 |
groups[i],
|
|
Packit Service |
b2c451 |
"system",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL)
|
|
Packit Service |
b2c451 |
goto error_out;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
users = g_key_file_get_integer_list (priv->key_file,
|
|
Packit Service |
b2c451 |
groups[i],
|
|
Packit Service |
b2c451 |
"users",
|
|
Packit Service |
b2c451 |
&num_users,
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL)
|
|
Packit Service |
b2c451 |
goto error_out;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
app_config = g_slice_new0 (AppConfig);
|
|
Packit Service |
b2c451 |
app_config->id = g_strdup (groups[i]);
|
|
Packit Service |
b2c451 |
app_config->allowed = allowed;
|
|
Packit Service |
b2c451 |
app_config->system = system;
|
|
Packit Service |
b2c451 |
app_config->users = users;
|
|
Packit Service |
b2c451 |
app_config->num_users = num_users;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->app_configs = g_list_prepend (priv->app_configs, app_config);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
continue;
|
|
Packit Service |
b2c451 |
error_out:
|
|
Packit Service |
b2c451 |
g_warning ("Failed to load configuration for app '%s': %s",
|
|
Packit Service |
b2c451 |
groups[i],
|
|
Packit Service |
b2c451 |
error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
g_strfreev (groups);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static gboolean
|
|
Packit Service |
b2c451 |
load_enable_source_config (GClueConfig *config,
|
|
Packit Service |
b2c451 |
const char *source_name)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
GError *error = NULL;
|
|
Packit Service |
b2c451 |
gboolean enable;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
enable = g_key_file_get_boolean (priv->key_file,
|
|
Packit Service |
b2c451 |
source_name,
|
|
Packit Service |
b2c451 |
"enable",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_debug ("Failed to get config %s/enable:"
|
|
Packit Service |
b2c451 |
" %s",
|
|
Packit Service |
b2c451 |
source_name,
|
|
Packit Service |
b2c451 |
error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
/* Source should be enabled by default */
|
|
Packit Service |
b2c451 |
return TRUE;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return enable;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
#define DEFAULT_WIFI_URL "https://location.services.mozilla.com/v1/geolocate?key=geoclue"
|
|
Packit Service |
b2c451 |
#define DEFAULT_WIFI_SUBMIT_URL "https://location.services.mozilla.com/v1/submit?key=geoclue"
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_wifi_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
GError *error = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->enable_wifi_source = load_enable_source_config (config, "wifi");
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->wifi_url = g_key_file_get_string (priv->key_file,
|
|
Packit Service |
b2c451 |
"wifi",
|
|
Packit Service |
b2c451 |
"url",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_warning ("%s", error->message);
|
|
Packit Service |
b2c451 |
g_clear_error (&error);
|
|
Packit Service |
b2c451 |
priv->wifi_url = g_strdup (DEFAULT_WIFI_URL);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->wifi_submit = g_key_file_get_boolean (priv->key_file,
|
|
Packit Service |
b2c451 |
"wifi",
|
|
Packit Service |
b2c451 |
"submit-data",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_debug ("Failed to get config wifi/submit-data: %s",
|
|
Packit Service |
b2c451 |
error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->wifi_submit_url = g_key_file_get_string (priv->key_file,
|
|
Packit Service |
b2c451 |
"wifi",
|
|
Packit Service |
b2c451 |
"submission-url",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_debug ("No wifi submission URL: %s", error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
priv->wifi_submit_url = g_strdup (DEFAULT_WIFI_SUBMIT_URL);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
priv->wifi_submit_nick = g_key_file_get_string (priv->key_file,
|
|
Packit Service |
b2c451 |
"wifi",
|
|
Packit Service |
b2c451 |
"submission-nick",
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_debug ("No wifi submission nick: %s", error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_3g_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
config->priv->enable_3g_source =
|
|
Packit Service |
b2c451 |
load_enable_source_config (config, "3g");
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_cdma_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
config->priv->enable_cdma_source =
|
|
Packit Service |
b2c451 |
load_enable_source_config (config, "cdma");
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_modem_gps_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
config->priv->enable_modem_gps_source =
|
|
Packit Service |
b2c451 |
load_enable_source_config (config, "modem-gps");
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
load_network_nmea_config (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
config->priv->enable_nmea_source =
|
|
Packit Service |
b2c451 |
load_enable_source_config (config, "network-nmea");
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
static void
|
|
Packit Service |
b2c451 |
gclue_config_init (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GError *error = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
config->priv =
|
|
Packit Service |
b2c451 |
G_TYPE_INSTANCE_GET_PRIVATE (config,
|
|
Packit Service |
b2c451 |
GCLUE_TYPE_CONFIG,
|
|
Packit Service |
b2c451 |
GClueConfigPrivate);
|
|
Packit Service |
b2c451 |
config->priv->key_file = g_key_file_new ();
|
|
Packit Service |
b2c451 |
g_key_file_load_from_file (config->priv->key_file,
|
|
Packit Service |
b2c451 |
CONFIG_FILE_PATH,
|
|
Packit Service |
b2c451 |
0,
|
|
Packit Service |
b2c451 |
&error);
|
|
Packit Service |
b2c451 |
if (error != NULL) {
|
|
Packit Service |
b2c451 |
g_critical ("Failed to load configuration file '%s': %s",
|
|
Packit Service |
b2c451 |
CONFIG_FILE_PATH, error->message);
|
|
Packit Service |
b2c451 |
g_error_free (error);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
load_agent_config (config);
|
|
Packit Service |
b2c451 |
load_app_configs (config);
|
|
Packit Service |
b2c451 |
load_wifi_config (config);
|
|
Packit Service |
b2c451 |
load_3g_config (config);
|
|
Packit Service |
b2c451 |
load_cdma_config (config);
|
|
Packit Service |
b2c451 |
load_modem_gps_config (config);
|
|
Packit Service |
b2c451 |
load_network_nmea_config (config);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
GClueConfig *
|
|
Packit Service |
b2c451 |
gclue_config_get_singleton (void)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
static GClueConfig *config = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
if (config == NULL)
|
|
Packit Service |
b2c451 |
config = g_object_new (GCLUE_TYPE_CONFIG, NULL);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return config;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_is_agent_allowed (GClueConfig *config,
|
|
Packit Service |
b2c451 |
const char *desktop_id,
|
|
Packit Service |
b2c451 |
GClueClientInfo *agent_info)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
gsize i;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (i = 0; i < config->priv->num_agents; i++) {
|
|
Packit Service |
b2c451 |
if (g_strcmp0 (desktop_id, config->priv->agents[i]) == 0)
|
|
Packit Service |
b2c451 |
return TRUE;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return FALSE;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gsize
|
|
Packit Service |
b2c451 |
gclue_config_get_num_allowed_agents (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->num_agents;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
GClueAppPerm
|
|
Packit Service |
b2c451 |
gclue_config_get_app_perm (GClueConfig *config,
|
|
Packit Service |
b2c451 |
const char *desktop_id,
|
|
Packit Service |
b2c451 |
GClueClientInfo *app_info)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
GList *node;
|
|
Packit Service |
b2c451 |
AppConfig *app_config = NULL;
|
|
Packit Service |
b2c451 |
gsize i;
|
|
Packit Service |
b2c451 |
guint64 uid;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
g_return_val_if_fail (desktop_id != NULL, GCLUE_APP_PERM_DISALLOWED);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (node = priv->app_configs; node != NULL; node = node->next) {
|
|
Packit Service |
b2c451 |
if (strcmp (((AppConfig *) node->data)->id, desktop_id) == 0) {
|
|
Packit Service |
b2c451 |
app_config = (AppConfig *) node->data;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
break;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
if (app_config == NULL) {
|
|
Packit Service |
b2c451 |
g_debug ("'%s' not in configuration", desktop_id);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return GCLUE_APP_PERM_ASK_AGENT;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
if (!app_config->allowed) {
|
|
Packit Service |
b2c451 |
g_debug ("'%s' disallowed by configuration", desktop_id);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return GCLUE_APP_PERM_DISALLOWED;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
if (app_config->num_users == 0)
|
|
Packit Service |
b2c451 |
return GCLUE_APP_PERM_ALLOWED;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
uid = gclue_client_info_get_user_id (app_info);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (i = 0; i < app_config->num_users; i++) {
|
|
Packit Service |
b2c451 |
if (app_config->users[i] == uid)
|
|
Packit Service |
b2c451 |
return GCLUE_APP_PERM_ALLOWED;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return GCLUE_APP_PERM_DISALLOWED;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_is_system_component (GClueConfig *config,
|
|
Packit Service |
b2c451 |
const char *desktop_id)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
GClueConfigPrivate *priv = config->priv;
|
|
Packit Service |
b2c451 |
GList *node;
|
|
Packit Service |
b2c451 |
AppConfig *app_config = NULL;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
g_return_val_if_fail (desktop_id != NULL, FALSE);
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
for (node = priv->app_configs; node != NULL; node = node->next) {
|
|
Packit Service |
b2c451 |
if (strcmp (((AppConfig *) node->data)->id, desktop_id) == 0) {
|
|
Packit Service |
b2c451 |
app_config = (AppConfig *) node->data;
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
break;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
return (app_config != NULL && app_config->system);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
const char *
|
|
Packit Service |
b2c451 |
gclue_config_get_wifi_url (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->wifi_url;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
const char *
|
|
Packit Service |
b2c451 |
gclue_config_get_wifi_submit_url (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->wifi_submit_url;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
const char *
|
|
Packit Service |
b2c451 |
gclue_config_get_wifi_submit_nick (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->wifi_submit_nick;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
void
|
|
Packit Service |
b2c451 |
gclue_config_set_wifi_submit_nick (GClueConfig *config,
|
|
Packit Service |
b2c451 |
const char *nick)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
config->priv->wifi_submit_nick = g_strdup (nick);
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_wifi_submit_data (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->wifi_submit;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_enable_wifi_source (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->enable_wifi_source;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_enable_3g_source (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->enable_3g_source;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_enable_modem_gps_source (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->enable_modem_gps_source;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_enable_cdma_source (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->enable_cdma_source;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
gboolean
|
|
Packit Service |
b2c451 |
gclue_config_get_enable_nmea_source (GClueConfig *config)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
return config->priv->enable_nmea_source;
|
|
Packit Service |
b2c451 |
}
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
void
|
|
Packit Service |
b2c451 |
gclue_config_set_wifi_submit_data (GClueConfig *config,
|
|
Packit Service |
b2c451 |
gboolean submit)
|
|
Packit Service |
b2c451 |
{
|
|
Packit Service |
b2c451 |
|
|
Packit Service |
b2c451 |
config->priv->wifi_submit = submit;
|
|
Packit Service |
b2c451 |
}
|