Add xdg_app_run_verify_environment_keys helper

tingping/wmclass
Alexander Larsson 2015-02-13 10:33:36 +01:00
parent 884040dfcc
commit 453423c350
3 changed files with 28 additions and 15 deletions

View File

@ -154,12 +154,7 @@ xdg_app_builtin_run (int argc, char **argv, GCancellable *cancellable, GError **
const char *branch = "master";
const char *command = "/bin/sh";
int i;
const char *key;
int rest_argv_start, rest_argc;
const char *environment_keys[] = {
"x11", "wayland", "ipc", "pulseaudio", "system-dbus", "session-dbus",
"network", "host-fs", "homedir", NULL
};
const char *no_opts[1] = { NULL };
const char **allow;
const char **forbid;
@ -320,22 +315,16 @@ xdg_app_builtin_run (int argc, char **argv, GCancellable *cancellable, GError **
else
forbid = no_opts;
if ((key = g_strv_subset (environment_keys, forbid)) != NULL)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Unknown Environment key %s", key);
goto out;
}
if (!xdg_app_run_verify_environment_keys (forbid, error))
goto out;
if (opt_allow)
allow = (const char **)opt_allow;
else
allow = no_opts;
if ((key = g_strv_subset (environment_keys, allow)) != NULL)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Unknown Environment key %s", key);
goto out;
}
if (!xdg_app_run_verify_environment_keys (allow, error))
goto out;
if ((g_key_file_get_boolean (metakey, "Environment", "ipc", NULL) || g_strv_contains (allow, "ipc")) &&
!g_strv_contains (forbid, "ipc"))

View File

@ -10,6 +10,27 @@
#include "xdg-app-run.h"
#include "xdg-app-utils.h"
gboolean
xdg_app_run_verify_environment_keys (const char **keys,
GError **error)
{
const char *key;
const char *environment_keys[] = {
"x11", "wayland", "ipc", "pulseaudio", "system-dbus", "session-dbus",
"network", "host-fs", "homedir", NULL
};
if ((key = g_strv_subset (environment_keys, keys)) != NULL)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Unknown Environment key %s", key);
return FALSE;
}
return TRUE;
}
static char *
extract_unix_path_from_dbus_address (const char *address)
{

View File

@ -1,6 +1,9 @@
#ifndef __XDG_APP_RUN_H__
#define __XDG_APP_RUN_H__
gboolean xdg_app_run_verify_environment_keys (const char **keys,
GError **error);
void xdg_app_run_add_x11_args (GPtrArray *argv_array);
void xdg_app_run_add_no_x11_args (GPtrArray *argv_array);
void xdg_app_run_add_wayland_args (GPtrArray *argv_array);