diff options
Diffstat (limited to 'debian/patches')
-rw-r--r-- | debian/patches/02_server-name.patch | 19 | ||||
-rw-r--r-- | debian/patches/03_x2go+rls.patch | 429 | ||||
-rw-r--r-- | debian/patches/series | 2 |
3 files changed, 0 insertions, 450 deletions
diff --git a/debian/patches/02_server-name.patch b/debian/patches/02_server-name.patch deleted file mode 100644 index 50c9a91..0000000 --- a/debian/patches/02_server-name.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/src/uccs-server.c -+++ b/src/uccs-server.c -@@ -20,6 +20,7 @@ - #include "config.h" - #endif - -+#include <glib.h> - #include <glib/gi18n.h> - - #include <json-glib/json-glib.h> -@@ -734,6 +735,8 @@ - argv[1] = server->username; - argv[2] = NULL; - -+ g_setenv("SERVER_ROOT", server->parent.uri, TRUE); -+ - g_spawn_async_with_pipes(NULL, /* pwd */ - (gchar **)argv, - NULL, /* env */ diff --git a/debian/patches/03_x2go+rls.patch b/debian/patches/03_x2go+rls.patch deleted file mode 100644 index d4563f7..0000000 --- a/debian/patches/03_x2go+rls.patch +++ /dev/null @@ -1,429 +0,0 @@ ---- a/src/com.canonical.RemoteLogin.xml -+++ b/src/com.canonical.RemoteLogin.xml -@@ -2,19 +2,21 @@ - <node name="/"> - <interface name="com.canonical.RemoteLogin"> - <!-- SERVER LIST DOCS - it's in a few places :-) -- s: server type: "ica", "freerdp", "uccs" -+ s: server type: "ica", "freerdp", "x2go", "uccs" - s: server name - s: server uri - b: last used server - a(sbva{sv}): properties for the server -- s: type: "username", "password", "domain", "email" -+ s: type: "username", "password", "domain", "email", "sessiontype" - b: required - v: default value -- a{sv}: properties for the value, currently only used for domains -- that have a list of possible domains -+ a{sv}: properties for the value -+ for value 'domain': a list of possible domains (ica, freerdp) - "domains": a(s) -- and domains that are read only -+ for value 'domain': a list of domains that are read only - "read-only": b -+ for value 'sessiontype': TODO -> a subset of session profile parameters... -+ "nothing-yet": s - a(si): applications pinned for the server - s: ID of the application (desktop file) - i: position the application is pinned in ---- a/src/server.c -+++ b/src/server.c -@@ -25,6 +25,7 @@ - #include "citrix-server.h" - #include "rdp-server.h" - #include "uccs-server.h" -+#include "x2go-server.h" - - static void server_class_init (ServerClass *klass); - static void server_init (Server *self); -@@ -162,6 +163,9 @@ - else if (g_strcmp0(proto, "freerdp") == 0 || g_strcmp0(proto, "rdp") == 0 || g_strcmp0(proto, "RDP") == 0 || g_strcmp0(proto, "FreeRDP") == 0) { - newserver = rdp_server_new_from_json(object); - } -+ else if (g_strcmp0(proto, "x2go") == 0 || g_strcmp0(proto, "X2go") == 0 || g_strcmp0(proto, "X2Go") == 0 || g_strcmp0(proto, "X2GO") == 0 || g_strcmp0(proto, "x2GO") == 0 || g_strcmp0(proto, "x2gO") == 0) { -+ newserver = x2go_server_new_from_json(object); -+ } - - return newserver; - } -@@ -184,6 +188,8 @@ - g_variant_builder_add_value(&tuple, g_variant_new_string("freerdp")); - } else if (IS_UCCS_SERVER(server)) { - g_variant_builder_add_value(&tuple, g_variant_new_string("uccs")); -+ } else if (IS_X2GO_SERVER(server)) { -+ g_variant_builder_add_value(&tuple, g_variant_new_string("x2go")); - } else { - g_assert_not_reached(); - } ---- a/po/POTFILES.in -+++ b/po/POTFILES.in -@@ -3,5 +3,6 @@ - src/remote-login.c - src/rdp-server.c - src/citrix-server.c -+src/x2go-server.c - src/main.c - src/uccs-server.c ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -36,6 +36,8 @@ - citrix-server.h \ - rdp-server.c \ - rdp-server.h \ -+ x2go-server.c \ -+ x2go-server.h \ - uccs-server.c \ - uccs-server.h \ - defines.h \ ---- a/src/defines.h -+++ b/src/defines.h -@@ -34,6 +34,7 @@ - #define CONFIG_SERVER_TYPE "Type" - #define CONFIG_SERVER_TYPE_RDP "RDP" - #define CONFIG_SERVER_TYPE_ICA "ICA" -+#define CONFIG_SERVER_TYPE_X2GO "X2GO" - #define CONFIG_SERVER_TYPE_UCCS "UCCS" - - #define JSON_PROTOCOL "Protocol" -@@ -43,5 +44,7 @@ - #define JSON_PASSWORD "Password" - #define JSON_DOMAIN_REQ "DomainRequired" - #define JSON_DOMAIN "WindowsDomain" -+#define JSON_SESSIONTYPE "SessionType" -+#define JSON_SESSIONTYPE_REQ "SessionTypeRequired" - - #endif /* __DEFINES_H__ */ ---- a/src/main.c -+++ b/src/main.c -@@ -33,6 +33,7 @@ - #include "rdp-server.h" - #include "citrix-server.h" - #include "uccs-server.h" -+#include "x2go-server.h" - #include "crypt.h" - - gint server_list_to_array (GVariantBuilder * builder, GList * items); ---- /dev/null -+++ b/src/x2go-server.c -@@ -0,0 +1,227 @@ -+/* -+ * Copyright © 2012 Canonical Ltd. -+ * Copyright © 2013 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -+ * -+ * This program is free software: you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3, as -+ * published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranties of -+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -+ * PURPOSE. See the GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program. If not, see <http://www.gnu.org/licenses/>. -+ * -+ * Author: Ted Gould <ted@canonical.com> -+ * Modified for X2Go: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include <sys/mman.h> -+ -+#include <glib/gi18n.h> -+ -+#include <string.h> -+ -+#include "x2go-server.h" -+#include "defines.h" -+ -+static void x2go_server_class_init (X2GoServerClass *klass); -+static void x2go_server_init (X2GoServer *self); -+static void x2go_server_dispose (GObject *object); -+static void x2go_server_finalize (GObject *object); -+static GVariant * get_properties (Server * server); -+ -+G_DEFINE_TYPE (X2GoServer, x2go_server, SERVER_TYPE); -+ -+static void -+x2go_server_class_init (X2GoServerClass *klass) -+{ -+ GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ -+ object_class->dispose = x2go_server_dispose; -+ object_class->finalize = x2go_server_finalize; -+ -+ ServerClass * server_class = SERVER_CLASS(klass); -+ -+ server_class->get_properties = get_properties; -+ -+ return; -+} -+ -+static void -+x2go_server_init (X2GoServer *self) -+{ -+ self->username = NULL; -+ self->password = NULL; -+ self->sessiontype = NULL; -+ self->sessiontype_required = FALSE; -+ -+ return; -+} -+ -+static void -+x2go_server_dispose (GObject *object) -+{ -+ -+ G_OBJECT_CLASS (x2go_server_parent_class)->dispose (object); -+ return; -+} -+ -+/* Unlocks the memory before freeing */ -+static void -+password_clear (gpointer data) -+{ -+ char * pass = (char *)data; -+ munlock(pass, strlen(pass)); -+ g_free(pass); -+ return; -+} -+ -+static void -+x2go_server_finalize (GObject *object) -+{ -+ X2GoServer * server = X2GO_SERVER(object); -+ -+ g_clear_pointer(&server->username, g_free); -+ g_clear_pointer(&server->password, password_clear); -+ g_clear_pointer(&server->sessiontype, g_free); -+ -+ G_OBJECT_CLASS (x2go_server_parent_class)->finalize (object); -+ return; -+} -+ -+static GVariant * -+get_properties (Server * server) -+{ -+ X2GoServer * rserver = X2GO_SERVER(server); -+ -+ GVariantBuilder propbuilder; -+ g_variant_builder_init(&propbuilder, G_VARIANT_TYPE_ARRAY); -+ -+ GVariantBuilder namebuilder; -+ g_variant_builder_init(&namebuilder, G_VARIANT_TYPE_TUPLE); -+ g_variant_builder_add_value(&namebuilder, g_variant_new_string("username")); -+ g_variant_builder_add_value(&namebuilder, g_variant_new_boolean(TRUE)); -+ if (rserver->username == NULL) { -+ g_variant_builder_add_value(&namebuilder, g_variant_new_variant(g_variant_new_string(""))); -+ } else { -+ g_variant_builder_add_value(&namebuilder, g_variant_new_variant(g_variant_new_string(rserver->username))); -+ } -+ g_variant_builder_add_value(&namebuilder, g_variant_parse(G_VARIANT_TYPE_VARDICT, "{}", NULL, NULL, NULL)); -+ g_variant_builder_add_value(&propbuilder, g_variant_builder_end(&namebuilder)); -+ -+ GVariantBuilder passbuilder; -+ g_variant_builder_init(&passbuilder, G_VARIANT_TYPE_TUPLE); -+ g_variant_builder_add_value(&passbuilder, g_variant_new_string("password")); -+ g_variant_builder_add_value(&passbuilder, g_variant_new_boolean(TRUE)); -+ if (rserver->password == NULL) { -+ g_variant_builder_add_value(&passbuilder, g_variant_new_variant(g_variant_new_string(""))); -+ } else { -+ g_variant_builder_add_value(&passbuilder, g_variant_new_variant(g_variant_new_string(rserver->password))); -+ } -+ g_variant_builder_add_value(&passbuilder, g_variant_parse(G_VARIANT_TYPE_VARDICT, "{}", NULL, NULL, NULL)); -+ g_variant_builder_add_value(&propbuilder, g_variant_builder_end(&passbuilder)); -+ -+ GVariantBuilder sessiontypebuilder; -+ g_variant_builder_init(&sessiontypebuilder, G_VARIANT_TYPE_TUPLE); -+ g_variant_builder_add_value(&sessiontypebuilder, g_variant_new_string("x2gosession")); -+ g_variant_builder_add_value(&sessiontypebuilder, g_variant_new_boolean(rserver->sessiontype_required)); -+ if (rserver->sessiontype == NULL) { -+ g_variant_builder_add_value(&sessiontypebuilder, g_variant_new_variant(g_variant_new_string(""))); -+ } else { -+ g_variant_builder_add_value(&sessiontypebuilder, g_variant_new_variant(g_variant_new_string(rserver->sessiontype))); -+ } -+ g_variant_builder_add_value(&sessiontypebuilder, g_variant_parse(G_VARIANT_TYPE_VARDICT, "{}", NULL, NULL, NULL)); -+ g_variant_builder_add_value(&propbuilder, g_variant_builder_end(&sessiontypebuilder)); -+ -+ return g_variant_builder_end(&propbuilder); -+} -+ -+Server * -+x2go_server_new_from_keyfile (GKeyFile * keyfile, const gchar * groupname) -+{ -+ g_return_val_if_fail(keyfile != NULL, NULL); /* NOTE: No way to check if that's really a keyfile :-( */ -+ g_return_val_if_fail(groupname != NULL, NULL); -+ -+ if (!g_key_file_has_group(keyfile, groupname)) { -+ g_warning("Server specified but group '%s' was not found", groupname); -+ return NULL; -+ } -+ -+ X2GoServer * server = g_object_new(X2GO_SERVER_TYPE, NULL); -+ -+ if (g_key_file_has_key(keyfile, groupname, CONFIG_SERVER_NAME, NULL)) { -+ gchar * keyname = g_key_file_get_string(keyfile, groupname, CONFIG_SERVER_NAME, NULL); -+ server->parent.name = g_strdup(_(keyname)); -+ g_free(keyname); -+ } -+ -+ if (g_key_file_has_key(keyfile, groupname, CONFIG_SERVER_URI, NULL)) { -+ server->parent.uri = g_key_file_get_string(keyfile, groupname, CONFIG_SERVER_URI, NULL); -+ } -+ -+ return SERVER(server); -+} -+ -+/* Build the X2Go server from information in the JSON object */ -+Server * -+x2go_server_new_from_json (JsonObject * object) -+{ -+ X2GoServer * server = g_object_new(X2GO_SERVER_TYPE, NULL); -+ -+ if (json_object_has_member(object, JSON_SERVER_NAME)) { -+ JsonNode * node = json_object_get_member(object, JSON_SERVER_NAME); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_STRING) { -+ const gchar * name = json_node_get_string(node); -+ server->parent.name = g_strdup(name); -+ } -+ } -+ -+ if (json_object_has_member(object, JSON_URI)) { -+ JsonNode * node = json_object_get_member(object, JSON_URI); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_STRING) { -+ const gchar * uri = json_node_get_string(node); -+ server->parent.uri = g_strdup(uri); -+ } -+ } -+ -+ if (json_object_has_member(object, JSON_USERNAME)) { -+ JsonNode * node = json_object_get_member(object, JSON_USERNAME); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_STRING) { -+ const gchar * username = json_node_get_string(node); -+ server->username = g_strdup(username); -+ } -+ } -+ -+ if (json_object_has_member(object, JSON_PASSWORD)) { -+ JsonNode * node = json_object_get_member(object, JSON_PASSWORD); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_STRING) { -+ const gchar * password = json_node_get_string(node); -+ server->password = g_strdup(password); -+ mlock(server->password, strlen(server->password)); -+ } -+ } -+ -+ if (json_object_has_member(object, JSON_SESSIONTYPE)) { -+ JsonNode * node = json_object_get_member(object, JSON_SESSIONTYPE); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_STRING) { -+ const gchar * sessiontype = json_node_get_string(node); -+ server->sessiontype = g_strdup(sessiontype); -+ } -+ } -+ -+ if (json_object_has_member(object, JSON_SESSIONTYPE_REQ)) { -+ JsonNode * node = json_object_get_member(object, JSON_SESSIONTYPE_REQ); -+ if (JSON_NODE_TYPE(node) == JSON_NODE_VALUE && json_node_get_value_type(node) == G_TYPE_BOOLEAN) { -+ server->sessiontype_required = json_node_get_boolean(node); -+ } -+ } -+ -+ return SERVER(server); -+} ---- /dev/null -+++ b/src/x2go-server.h -@@ -0,0 +1,59 @@ -+/* -+ * Copyright © 2012 Canonical Ltd. -+ * Copyright © 2013 Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -+ * -+ * This program is free software: you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 3, as -+ * published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, but -+ * WITHOUT ANY WARRANTY; without even the implied warranties of -+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -+ * PURPOSE. See the GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program. If not, see <http://www.gnu.org/licenses/>. -+ * -+ * Author: Ted Gould <ted@canonical.com> -+ * Modified for X2Go: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -+ */ -+ -+#ifndef __X2GO_SERVER_H__ -+#define __X2GO_SERVER_H__ -+ -+#include <glib-object.h> -+#include <json-glib/json-glib.h> -+#include "server.h" -+ -+G_BEGIN_DECLS -+ -+#define X2GO_SERVER_TYPE (x2go_server_get_type ()) -+#define X2GO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), X2GO_SERVER_TYPE, X2GoServer)) -+#define X2GO_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), X2GO_SERVER_TYPE, X2GoServerClass)) -+#define IS_X2GO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), X2GO_SERVER_TYPE)) -+#define IS_X2GO_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), X2GO_SERVER_TYPE)) -+#define X2GO_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), X2GO_SERVER_TYPE, X2GoServerClass)) -+ -+typedef struct _X2GoServer X2GoServer; -+typedef struct _X2GoServerClass X2GoServerClass; -+ -+struct _X2GoServerClass { -+ ServerClass parent_class; -+}; -+ -+struct _X2GoServer { -+ Server parent; -+ -+ gchar * username; -+ gchar * password; -+ gchar * sessiontype; -+ gboolean sessiontype_required; -+}; -+ -+GType x2go_server_get_type (void); -+Server * x2go_server_new_from_keyfile (GKeyFile * keyfile, const gchar * name); -+Server * x2go_server_new_from_json (JsonObject * object); -+ -+G_END_DECLS -+ -+#endif ---- a/tests/slmock -+++ b/tests/slmock -@@ -78,6 +78,20 @@ - ms.set_default(ts1.Name) - print(ms.toJson()) - -+def x2go(email): -+ ms = ManagementServer("http://x2go.intern", "X2GoSessionBroker") -+ ts1 = TerminalServer("10.0.2.11", "X2Go Server 1", "x2go", False, -+ "foo") -+ ts2 = TerminalServer("10.0.2.12", "X2Go Server 2", "x2go", False, -+ "bar") -+ ts3 = TerminalServer("10.0.2.13", "X2Go Server 3", "x2go", False, -+ "foobar") -+ ms.add_terminal_server(ts1) -+ ms.add_terminal_server(ts2) -+ ms.add_terminal_server(ts3) -+ ms.set_default(ts1.Name) -+ print(ms.toJson()) -+ - def print_error(text): - print("{ \"Error\": \"%s\" }" % text) - -@@ -201,6 +215,7 @@ - "d" : defaults, #for easy testing of default ts - "e" : error, - "f" : freerdp, -+ "x" : x2go, - "g" : garbage, - "m" : missing_fields, #json missing some fields - "r" : random_string, diff --git a/debian/patches/series b/debian/patches/series index 8fc1feb..c1e82f9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,2 @@ 01_clear_servers.patch glib-deprecated.diff -02_server-name.patch -03_x2go+rls.patch |