Commit da29a066 authored by Antenore Gatta's avatar Antenore Gatta

Refactoring - rename plugin source directory

parent 9d411f09
......@@ -237,8 +237,8 @@ endif()
if(GTK_FOUND)
add_subdirectory(remmina)
add_subdirectory(remmina-plugins)
add_subdirectory(remmina-plugin-secret)
add_subdirectory(plugins)
add_subdirectory(plugins/secret)
endif()
if(WITH_EXAMPLES)
......
......@@ -797,7 +797,7 @@ INPUT = CHANGELOG.md \
README.md \
../Remmina.wiki \
remmina \
remmina-plugins \
plugins \
remmina-plugin-secret \
scripts
......
# remmina-plugin-secret - The GTK+ Remote Desktop Client
#
# Copyright (C) 2011 Marc-Andre Moreau
# Copyright (C) 2014-2017 Antenore Gatta, Giovanni Panozzo
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the
# OpenSSL library under certain conditions as described in each
# individual source file, and distribute linked combinations
# including the two.
# You must obey the GNU General Public License in all respects
# for all of the code used other than OpenSSL. If you modify
# file(s) with this exception, you may extend this exception to your
# version of the file(s), but you are not obligated to do so. If you
# do not wish to do so, delete this exception statement from your
# version. If you delete this exception statement from all source
# files in the program, then also delete it here.
find_suggested_package(Libsecret)
if(LIBSECRET_FOUND)
set(REMMINA_PLUGIN_SECRET_SRCS
src/glibsecret_plugin.c
)
add_library(remmina-plugin-secret MODULE ${REMMINA_PLUGIN_SECRET_SRCS})
set_target_properties(remmina-plugin-secret PROPERTIES PREFIX "")
set_target_properties(remmina-plugin-secret PROPERTIES NO_SONAME 1)
include_directories(${GTK_INCLUDE_DIRS})
target_link_libraries(remmina-plugin-secret ${GTK_LIBRARY_DIRS})
include_directories(SYSTEM ${LIBSECRET_INCLUDE_DIRS})
target_link_libraries(remmina-plugin-secret ${LIBSECRET_LIBRARIES} ${GLIB2_LIBRARY})
install(TARGETS remmina-plugin-secret DESTINATION ${REMMINA_PLUGINDIR})
endif()
/*
* Remmina - The GTK+ Remote Desktop Client
* Copyright (C) 2011 Vic Lee
* Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. * If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. * If you
* do not wish to do so, delete this exception statement from your
* version. * If you delete this exception statement from all source
* files in the program, then also delete it here.
*
*/
#include "config.h"
#include "glibsecret_plugin.h"
#include <gtk/gtk.h>
#include <glib.h>
#include <libsecret/secret.h>
#include <remmina/plugin.h>
static RemminaPluginService *remmina_plugin_service = NULL;
static SecretSchema remmina_file_secret_schema =
{ "org.remmina.Password", SECRET_SCHEMA_NONE,
{
{ "filename", SECRET_SCHEMA_ATTRIBUTE_STRING },
{ "key", SECRET_SCHEMA_ATTRIBUTE_STRING },
{ NULL, 0 }
} };
#ifdef LIBSECRET_VERSION_0_18
static SecretService* secretservice;
static SecretCollection* defaultcollection;
#endif
static void remmina_plugin_glibsecret_unlock_secret_service()
{
TRACE_CALL(__func__);
#ifdef LIBSECRET_VERSION_0_18
GError *error = NULL;
GList *objects, *ul;
gchar* lbl;
if (secretservice && defaultcollection) {
if (secret_collection_get_locked(defaultcollection)) {
lbl = secret_collection_get_label(defaultcollection);
remmina_plugin_service->log_printf("[glibsecret] requesting unlock of the default '%s' collection\n", lbl);
objects = g_list_append(NULL, defaultcollection);
secret_service_unlock_sync(secretservice, objects, NULL, &ul, &error);
g_list_free(objects);
g_list_free(ul);
}
}
#endif
return;
}
void remmina_plugin_glibsecret_store_password(RemminaFile *remminafile, const gchar *key, const gchar *password)
{
TRACE_CALL(__func__);
GError *r = NULL;
const gchar *path;
gchar *s;
remmina_plugin_glibsecret_unlock_secret_service();
path = remmina_plugin_service->file_get_path(remminafile);
s = g_strdup_printf("Remmina: %s - %s", remmina_plugin_service->file_get_string(remminafile, "name"), key);
secret_password_store_sync(&remmina_file_secret_schema, SECRET_COLLECTION_DEFAULT, s, password,
NULL, &r, "filename", path, "key", key, NULL);
g_free(s);
if (r == NULL) {
remmina_plugin_service->log_printf("[glibsecret] password saved for file %s\n", path);
}else {
remmina_plugin_service->log_printf("[glibsecret] password cannot be saved for file %s\n", path);
g_error_free(r);
}
}
gchar*
remmina_plugin_glibsecret_get_password(RemminaFile *remminafile, const gchar *key)
{
TRACE_CALL(__func__);
GError *r = NULL;
const gchar *path;
gchar *password;
gchar *p;
remmina_plugin_glibsecret_unlock_secret_service();
path = remmina_plugin_service->file_get_path(remminafile);
password = secret_password_lookup_sync(&remmina_file_secret_schema, NULL, &r, "filename", path, "key", key, NULL);
if (r == NULL) {
// remmina_plugin_service->log_printf("[glibsecret] found password for file %s\n", path);
p = g_strdup(password);
secret_password_free(password);
return p;
}else {
remmina_plugin_service->log_printf("[glibsecret] password cannot be found for file %s\n", path);
return NULL;
}
}
void remmina_plugin_glibsecret_delete_password(RemminaFile *remminafile, const gchar *key)
{
TRACE_CALL(__func__);
GError *r = NULL;
const gchar *path;
remmina_plugin_glibsecret_unlock_secret_service();
path = remmina_plugin_service->file_get_path(remminafile);
secret_password_clear_sync(&remmina_file_secret_schema, NULL, &r, "filename", path, "key", key, NULL);
if (r == NULL) {
remmina_plugin_service->log_printf("[glibsecret] password deleted for file %s\n", path);
}else {
remmina_plugin_service->log_printf("[glibsecret] password cannot be deleted for file %s\n", path);
}
}
static RemminaSecretPlugin remmina_plugin_glibsecret =
{ REMMINA_PLUGIN_TYPE_SECRET, "glibsecret", "GNOME libsecret", NULL, VERSION,
TRUE, remmina_plugin_glibsecret_store_password, remmina_plugin_glibsecret_get_password, remmina_plugin_glibsecret_delete_password };
G_MODULE_EXPORT gboolean
remmina_plugin_entry(RemminaPluginService *service)
{
TRACE_CALL(__func__);
remmina_plugin_service = service;
if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_glibsecret)) {
return FALSE;
}
#ifdef LIBSECRET_VERSION_0_18
GError *error;
error = NULL;
secretservice = secret_service_get_sync(SECRET_SERVICE_LOAD_COLLECTIONS, NULL, &error);
if (error) {
remmina_plugin_service->log_printf("[glibsecret] unable to get secret service: %s\n", error->message);
return FALSE;
}
defaultcollection = secret_collection_for_alias_sync(secretservice, SECRET_COLLECTION_DEFAULT, SECRET_COLLECTION_NONE, NULL, &error);
if (error) {
remmina_plugin_service->log_printf("[glibsecret] unable to get secret service default collection: %s\n", error->message);
return FALSE;
}
#endif
return TRUE;
}
/*
* Remmina - The GTK+ Remote Desktop Client
* Copyright (C) 2015-2017 Antenore Gatta, Giovanni Panozzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. * If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. * If you
* do not wish to do so, delete this exception statement from your
* version. * If you delete this exception statement from all source
* files in the program, then also delete it here.
*
*/
#ifndef __BACKEND_LIBSECRET_H__
#define __BACKEND_LIBSECRET_H__
#include <libsecret/secret.h>
#include <glib.h>
#endif // __BACKEND_LIBSECRET_H__
# Remmina - The GTK+ Remote Desktop Client
#
# Copyright (C) 2011 Marc-Andre Moreau
# Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
# Copyright (C) 2016-2017 Antenore Gatta, Giovanni Panozzo
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the
# OpenSSL library under certain conditions as described in each
# individual source file, and distribute linked combinations
# including the two.
# You must obey the GNU General Public License in all respects
# for all of the code used other than OpenSSL. If you modify
# file(s) with this exception, you may extend this exception to your
# version of the file(s), but you are not obligated to do so. If you
# do not wish to do so, delete this exception statement from your
# version. If you delete this exception statement from all source
# files in the program, then also delete it here.
# Needed FreeRDP version to build freerdp plugin
set(FREERDP_REQUIRED_MAJOR 2)
set(FREERDP_REQUIRED_MINOR 0)
set(FREERDP_REQUIRED_REVISION 0)
set(FREERDP_REQUIRED_VERSIONSTRING
${FREERDP_REQUIRED_MAJOR}.${FREERDP_REQUIRED_MINOR}.${FREERDP_REQUIRED_REVISION})
include_directories(${CMAKE_SOURCE_DIR}/remmina-plugins)
set(APPICON16_EMBLEMS_DIR "${REMMINA_DATADIR}/icons/hicolor/16x16/emblems")
set(APPICON22_EMBLEMS_DIR "${REMMINA_DATADIR}/icons/hicolor/22x22/emblems")
set(REMMINA_COMMON_INCLUDE_DIRS ${GTK_INCLUDE_DIRS})
set(REMMINA_COMMON_LIBRARIES ${GTK_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
find_suggested_package(LIBSSH)
if(LIBSSH_FOUND)
add_definitions(-DHAVE_LIBSSH)
include_directories(${SSH_INCLUDE_DIRS})
target_link_libraries(remmina ${SSH_LIBRARIES})
endif()
find_required_package(XKBFILE)
if(LIBSSH_FOUND AND XKBFILE_FOUND)
add_subdirectory(nx)
endif()
add_subdirectory(xdmcp)
find_suggested_package(FREERDP)
if(FREERDP_FOUND)
add_subdirectory(rdp)
endif()
find_suggested_package(TELEPATHY)
if(TELEPATHY_FOUND)
add_subdirectory(telepathy)
endif()
find_suggested_package(LIBVNCSERVER)
if(LIBVNCSERVER_FOUND)
add_subdirectory(vnc)
endif()
find_suggested_package(SPICE)
if(SPICE_FOUND)
add_subdirectory(spice)
endif()
if(WITH_EXAMPLES)
add_subdirectory(tool_hello_world)
endif()
add_subdirectory(exec)
/*
* Remmina - The GTK+ Remote Desktop Client
* Copyright (C) 2010 Vic Lee
* Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
* Copyright (C) 2016-2017 Antenore Gatta, Giovanni Panozzo
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. * If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. * If you
* do not wish to do so, delete this exception statement from your
* version. * If you delete this exception statement from all source
* files in the program, then also delete it here.
*
*/
#pragma once
#include "config.h"
#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
#include <glib/gstdio.h>
#include <remmina/plugin.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "remmina/remmina_trace_calls.h"
typedef void (*PThreadCleanupFunc)(void*);
#define IDLE_ADD gdk_threads_add_idle
#define TIMEOUT_ADD gdk_threads_add_timeout
#define CANCEL_ASYNC pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_testcancel();
#define CANCEL_DEFER pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
#define THREADS_ENTER _Pragma("GCC error \"THREADS_ENTER has been deprecated in Remmina 1.2\"")
#define THREADS_LEAVE _Pragma("GCC error \"THREADS_LEAVE has been deprecated in Remmina 1.2\"")
#define MAX_X_DISPLAY_NUMBER 99
#define X_UNIX_SOCKET "/tmp/.X11-unix/X%d"
#define INCLUDE_GET_AVAILABLE_XDISPLAY static gint \
remmina_get_available_xdisplay(void) \
{ \
gint i; \
gint display = 0; \
gchar fn[200]; \
for (i = 1; i < MAX_X_DISPLAY_NUMBER; i++) \
{ \
g_snprintf(fn, sizeof(fn), X_UNIX_SOCKET, i); \
if (!g_file_test(fn, G_FILE_TEST_EXISTS)) \
{ \
display = i; \
break; \
} \
} \
return display; \
}
# remmina-plugin-tool_hello_world - The GTK+ Remote Desktop Client
#
# Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
# Copyright (C) 2016-2017 Antenore Gatta, Giovanni Panozzo
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the
# OpenSSL library under certain conditions as described in each
# individual source file, and distribute linked combinations
# including the two.
# You must obey the GNU General Public License in all respects
# for all of the code used other than OpenSSL. If you modify
# file(s) with this exception, you may extend this exception to your
# version of the file(s), but you are not obligated to do so. If you
# do not wish to do so, delete this exception statement from your
# version. If you delete this exception statement from all source
# files in the program, then also delete it here.
set(REMMINA_PLUGIN_EXEC_SRCS
exec_plugin_config.h
exec_plugin.c
)
add_library(remmina-plugin-exec MODULE ${REMMINA_PLUGIN_EXEC_SRCS})
set_target_properties(remmina-plugin-exec PROPERTIES PREFIX "")
set_target_properties(remmina-plugin-exec PROPERTIES NO_SONAME 1)
include_directories(${REMMINA_COMMON_INCLUDE_DIRS} ${GTK_INCLUDE_DIRS})
target_link_libraries(remmina-plugin-exec ${REMMINA_COMMON_LIBRARIES})
install(TARGETS remmina-plugin-exec DESTINATION ${REMMINA_PLUGINDIR})
install(FILES
16x16/emblems/remmina-tool.png
16x16/emblems/remmina-tool.png
DESTINATION ${APPICON16_EMBLEMS_DIR})
install(FILES
22x22/emblems/remmina-tool.png
22x22/emblems/remmina-tool.png
DESTINATION ${APPICON22_EMBLEMS_DIR})
This diff is collapsed.
/*
* Remmina - The GTK+ Remote Desktop Client
* Copyright (C) 2017 Antenore Gatta
*
* Initially based on the plugin "Remmina Plugin EXEC", created and written by
* Fabio Castelli (Muflone) <muflone@vbsimple.net>.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give
* permission to link the code of portions of this program with the
* OpenSSL library under certain conditions as described in each
* individual source file, and distribute linked combinations
* including the two.
* You must obey the GNU General Public License in all respects
* for all of the code used other than OpenSSL. * If you modify
* file(s) with this exception, you may extend this exception to your
* version of the file(s), but you are not obligated to do so. * If you
* do not wish to do so, delete this exception statement from your
* version. * If you delete this exception statement from all source
* files in the program, then also delete it here.
*
*/
#pragma once
#define PLUGIN_NAME "EXEC"
#define PLUGIN_DESCRIPTION "Execute a command"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_APPICON "remmina-tool"
# remmina-plugin-nx - The GTK+ Remote Desktop Client
#
# Copyright (C) 2011 Marc-Andre Moreau
# Copyright (C) 2014-2017 Antenore Gatta, Giovanni Panozzo
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the
# OpenSSL library under certain conditions as described in each
# individual source file, and distribute linked combinations
# including the two.
# You must obey the GNU General Public License in all respects
# for all of the code used other than OpenSSL. If you modify
# file(s) with this exception, you may extend this exception to your
# version of the file(s), but you are not obligated to do so. If you
# do not wish to do so, delete this exception statement from your
# version. If you delete this exception statement from all source
# files in the program, then also delete it here.
set(REMMINA_PLUGIN_NX_SRCS
nx_session.c
nx_session.h
nx_session_manager.c
nx_session_manager.h
nx_plugin.c
nx_plugin.h
)
add_library(remmina-plugin-nx ${REMMINA_PLUGIN_NX_SRCS})
set_target_properties(remmina-plugin-nx PROPERTIES PREFIX "")
set_target_properties(remmina-plugin-nx PROPERTIES NO_SONAME 1)
find_package(X11)
include_directories(${REMMINA_COMMON_INCLUDE_DIRS}
${XKBFILE_INCLUDE_DIRS} ${LIBSSH_INCLUDE_DIRS})
target_link_libraries(remmina-plugin-nx
${REMMINA_COMMON_LIBRARIES}
${XKBFILE_LIBRARIES}
${LIBSSH_LIBRARIES}
${X11_X11_LIB})
install(TARGETS remmina-plugin-nx DESTINATION ${REMMINA_PLUGINDIR})
install(FILES
16x16/emblems/remmina-nx.png
DESTINATION ${APPICON16_EMBLEMS_DIR})
install(FILES
22x22/emblems/remmina-nx.png
DESTINATION ${APPICON22_EMBLEMS_DIR})
This diff is collapsed.
/*
* Remmina - The GTK+ Remote Desktop Client
* Copyright (C) 2010 Vic Lee
* Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo