[gnome-terminal/gsettings] server: Validate the given name
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-terminal/gsettings] server: Validate the given name
- Date: Thu, 15 Mar 2012 19:42:47 +0000 (UTC)
commit ba0dc07a9c6e2c16ad299d87626f711e81f15e21
Author: Christian Persch <chpe gnome org>
Date: Thu Mar 15 19:34:55 2012 +0100
server: Validate the given name
src/client.c | 22 +++++++++++++-
src/server.c | 77 ++++++++++++++++++++++++++---------------------
src/terminal-options.c | 24 +++++++++++++-
3 files changed, 86 insertions(+), 37 deletions(-)
---
diff --git a/src/client.c b/src/client.c
index ed10f60..2502905 100644
--- a/src/client.c
+++ b/src/client.c
@@ -204,11 +204,31 @@ option_zoom_cb (const gchar *option_name,
return TRUE;
}
+static gboolean
+option_bus_name_cb (const gchar *option_name,
+ const gchar *value,
+ gpointer user_data,
+ GError **error)
+{
+ OptionData *data = user_data;
+
+ if (!g_dbus_is_name (value)) {
+ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+ "%s is not a valid D-Bus name", value);
+ return FALSE;
+ }
+
+ g_free (data->server_bus_name);
+ data->server_bus_name = g_strdup (value);
+
+ return TRUE;
+}
+
static GOptionContext *
get_goption_context (OptionData *data)
{
const GOptionEntry server_goptions[] = {
- { "bus-name", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &data->server_bus_name, N_("Server D-Bus name"), N_("NAME") },
+ { "bus-name", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, option_bus_name_cb, N_("Server D-Bus name"), N_("NAME") },
{ NULL }
};
diff --git a/src/server.c b/src/server.c
index 444d236..870a2fe 100644
--- a/src/server.c
+++ b/src/server.c
@@ -40,6 +40,31 @@
#include "terminal-defines.h"
GDBusObjectManagerServer *object_manager;
+static char *bus_name = NULL;
+
+static gboolean
+option_bus_name_cb (const gchar *option_name,
+ const gchar *value,
+ gpointer data,
+ GError **error)
+{
+ if (!g_dbus_is_name (value)) {
+ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+ "%s is not a valid D-Bus name", value);
+ return FALSE;
+ }
+
+ g_free (bus_name);
+ bus_name = g_strdup (value);
+
+ return TRUE;
+}
+
+static const GOptionEntry options[] = {
+ { "bus-name", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, option_bus_name_cb, "Server D-Bus name", "NAME" },
+ { NULL }
+};
+
typedef struct {
int exit_code;
@@ -50,10 +75,17 @@ bus_acquired_cb (GDBusConnection *connection,
const char *name,
gpointer user_data)
{
+ TerminalObjectSkeleton *object;
_terminal_debug_print (TERMINAL_DEBUG_FACTORY,
"Bus %s acquired\n", name);
+ object = terminal_object_skeleton_new (TERMINAL_FACTORY_OBJECT_PATH);
+ terminal_object_skeleton_set_factory (object, TERMINAL_FACTORY (terminal_app_get ()));
+ g_dbus_object_manager_server_export (object_manager, G_DBUS_OBJECT_SKELETON (object));
+ g_object_unref (object);
+
+ /* And export the object */
g_dbus_object_manager_server_set_connection (object_manager, connection);
}
@@ -85,17 +117,9 @@ name_lost_cb (GDBusConnection *connection,
gtk_main_quit ();
}
-static char *bus_name = NULL;
-static const GOptionEntry options[] = {
- { "bus-name", 0, 0, G_OPTION_ARG_STRING, &bus_name, N_("Server D-Bus name"), N_("NAME") },
- { NULL }
-};
-
int
main (int argc, char **argv)
{
- GDBusConnection *connection;
- TerminalObjectSkeleton *object;
OwnData data;
guint owner_id;
const char *home_dir;
@@ -128,32 +152,16 @@ main (int argc, char **argv)
exit (EXIT_FAILURE);
}
- connection = g_bus_get_sync (G_BUS_TYPE_STARTER, NULL, &error);
- if (connection == NULL) {
- g_printerr ("Failed to connect: %s\n", error->message);
- g_error_free (error);
- g_free (bus_name);
- }
-
object_manager = g_dbus_object_manager_server_new (TERMINAL_OBJECT_PATH_PREFIX);
- /* Export our interface. */
- object = terminal_object_skeleton_new (TERMINAL_FACTORY_OBJECT_PATH);
- terminal_object_skeleton_set_factory (object, TERMINAL_FACTORY (terminal_app_get ()));
- g_dbus_object_manager_server_export (object_manager, G_DBUS_OBJECT_SKELETON (object));
- g_object_unref (object);
-
- /* And export the object */
- g_dbus_object_manager_server_set_connection (object_manager, connection);
-
data.exit_code = EXIT_FAILURE;
- owner_id = g_bus_own_name_on_connection (connection,
- bus_name ? bus_name : TERMINAL_UNIQUE_NAME,
- G_BUS_NAME_OWNER_FLAGS_NONE,
- name_acquired_cb,
- name_lost_cb,
- &data, NULL);
- g_free (bus_name);
+ owner_id = g_bus_own_name (G_BUS_TYPE_STARTER,
+ bus_name ? bus_name : TERMINAL_UNIQUE_NAME,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired_cb,
+ name_acquired_cb,
+ name_lost_cb,
+ &data, NULL);
gtk_main ();
@@ -161,9 +169,10 @@ main (int argc, char **argv)
g_dbus_object_manager_server_unexport (object_manager, TERMINAL_FACTORY_OBJECT_PATH);
if (data.exit_code == EXIT_SUCCESS)
- g_dbus_connection_flush_sync (connection, NULL /* cancellable */, NULL /* error */);
- g_clear_object (&object_manager);
- g_clear_object (&connection);
+ g_dbus_connection_flush_sync (g_dbus_object_manager_server_get_connection (object_manager),
+ NULL /* cancellable */, NULL /* error */);
+ g_object_unref (object_manager);
+ object_manager = NULL;
terminal_app_shutdown ();
diff --git a/src/terminal-options.c b/src/terminal-options.c
index a4c7ea7..2654d28 100644
--- a/src/terminal-options.c
+++ b/src/terminal-options.c
@@ -235,6 +235,26 @@ option_version_cb (const gchar *option_name,
}
static gboolean
+option_bus_name_callback (const gchar *option_name,
+ const gchar *value,
+ gpointer data,
+ GError **error)
+{
+ TerminalOptions *options = data;
+
+ if (!g_dbus_is_name (value)) {
+ g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+ "%s is not a valid D-Bus name", value);
+ return FALSE;
+ }
+
+ g_free (options->server_bus_name);
+ options->server_bus_name = g_strdup (value);
+
+ return TRUE;
+}
+
+static gboolean
option_command_callback (const gchar *option_name,
const gchar *value,
gpointer data,
@@ -970,8 +990,8 @@ get_goption_context (TerminalOptions *options)
"bus-name",
0,
G_OPTION_FLAG_HIDDEN,
- G_OPTION_ARG_STRING,
- &options->server_bus_name,
+ G_OPTION_ARG_CALLBACK,
+ option_bus_name_callback,
N_("Server D-Bus name"),
N_("NAME")
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]