2019-10-14 08:43:52 +02:00
|
|
|
Index: b/configure.ac
|
|
|
|
===================================================================
|
2020-03-11 10:52:18 +01:00
|
|
|
--- a/configure.ac 2020-03-11 15:31:17.466041360 +0800
|
|
|
|
+++ b/configure.ac 2020-03-11 15:31:17.466041360 +0800
|
2017-06-30 09:57:10 +02:00
|
|
|
@@ -9,6 +9,7 @@ AC_PROG_CC
|
2016-09-21 13:37:09 +02:00
|
|
|
AC_C_CONST
|
|
|
|
AC_PROG_LIBTOOL
|
2017-06-30 09:57:10 +02:00
|
|
|
|
2016-09-21 13:37:09 +02:00
|
|
|
+PKG_CHECK_MODULES(AVAHI, avahi-client >= 0.6.4)
|
|
|
|
PKG_PROG_PKG_CONFIG
|
2017-06-30 09:57:10 +02:00
|
|
|
if test "x$PKG_CONFIG" = "x"; then
|
|
|
|
AC_MSG_ERROR([please install pkg-config])
|
2019-10-14 08:43:52 +02:00
|
|
|
Index: b/xrdp/Makefile.am
|
|
|
|
===================================================================
|
2020-03-11 10:52:18 +01:00
|
|
|
--- a/xrdp/Makefile.am 2020-03-11 15:31:17.466041360 +0800
|
|
|
|
+++ b/xrdp/Makefile.am 2020-03-11 15:31:17.466041360 +0800
|
2017-06-30 09:57:10 +02:00
|
|
|
@@ -12,7 +12,9 @@ AM_CPPFLAGS = \
|
|
|
|
-DXRDP_SOCKET_PATH=\"${socketdir}\" \
|
2016-09-21 13:37:09 +02:00
|
|
|
-I$(top_builddir) \
|
|
|
|
-I$(top_srcdir)/common \
|
2017-06-30 09:57:10 +02:00
|
|
|
- -I$(top_srcdir)/libxrdp
|
|
|
|
+ -I$(top_srcdir)/libxrdp \
|
2016-09-21 13:37:09 +02:00
|
|
|
+ $(AVAHI_CFLAGS)
|
2017-06-30 09:57:10 +02:00
|
|
|
+
|
2016-09-21 13:37:09 +02:00
|
|
|
|
2017-06-30 09:57:10 +02:00
|
|
|
XRDP_EXTRA_LIBS =
|
2016-09-21 13:37:09 +02:00
|
|
|
|
2017-06-30 09:57:10 +02:00
|
|
|
@@ -46,6 +48,7 @@ xrdp_SOURCES = \
|
|
|
|
lang.c \
|
|
|
|
xrdp.c \
|
|
|
|
xrdp.h \
|
|
|
|
+ xrdp_avahi.c \
|
|
|
|
xrdp_bitmap.c \
|
|
|
|
xrdp_cache.c \
|
|
|
|
xrdp_encoder.c \
|
|
|
|
@@ -63,7 +66,8 @@ xrdp_SOURCES = \
|
2016-09-21 13:37:09 +02:00
|
|
|
xrdp_LDADD = \
|
|
|
|
$(top_builddir)/common/libcommon.la \
|
|
|
|
$(top_builddir)/libxrdp/libxrdp.la \
|
2017-06-30 09:57:10 +02:00
|
|
|
- $(XRDP_EXTRA_LIBS)
|
|
|
|
+ $(XRDP_EXTRA_LIBS) \
|
2016-09-21 13:37:09 +02:00
|
|
|
+ $(AVAHI_LIBS)
|
|
|
|
|
2017-06-30 09:57:10 +02:00
|
|
|
xrdpsysconfdir=$(sysconfdir)/xrdp
|
|
|
|
|
2019-10-14 08:43:52 +02:00
|
|
|
Index: b/xrdp/xrdp.h
|
|
|
|
===================================================================
|
2020-03-11 10:52:18 +01:00
|
|
|
--- a/xrdp/xrdp.h 2020-03-11 15:31:17.466041360 +0800
|
|
|
|
+++ b/xrdp/xrdp.h 2020-03-11 15:31:17.466041360 +0800
|
2019-10-14 08:43:52 +02:00
|
|
|
@@ -527,3 +527,10 @@ server_add_char_alpha(struct xrdp_mod* m
|
2017-06-30 09:57:10 +02:00
|
|
|
int
|
|
|
|
server_session_info(struct xrdp_mod *mod, const char *data, int data_bytes);
|
|
|
|
|
2016-09-21 13:37:09 +02:00
|
|
|
+/* xrdp_avahi.c */
|
2017-06-30 09:57:10 +02:00
|
|
|
+int
|
2016-09-21 13:37:09 +02:00
|
|
|
+xrdp_avahi_init(void);
|
2017-06-30 09:57:10 +02:00
|
|
|
+void
|
2016-09-21 13:37:09 +02:00
|
|
|
+xrdp_avahi_fini(void);
|
2019-10-14 08:43:52 +02:00
|
|
|
+void
|
|
|
|
+xrdp_avahi_get_port(char *port);
|
|
|
|
Index: b/xrdp/xrdp_avahi.c
|
|
|
|
===================================================================
|
|
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
2020-03-11 10:52:18 +01:00
|
|
|
+++ b/xrdp/xrdp_avahi.c 2020-03-11 15:46:17.611966870 +0800
|
|
|
|
@@ -0,0 +1,176 @@
|
2016-09-21 13:37:09 +02:00
|
|
|
+/*
|
|
|
|
+ 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
+
|
|
|
|
+ xrdp: A Remote Desktop Protocol server.
|
|
|
|
+ Copyright (C) Novell, Inc. 2008
|
|
|
|
+
|
|
|
|
+ avahi integration
|
|
|
|
+
|
|
|
|
+*/
|
|
|
|
+
|
2020-03-11 10:52:18 +01:00
|
|
|
+#include <stdio.h>
|
|
|
|
+#include <unistd.h>
|
|
|
|
+
|
2016-09-21 13:37:09 +02:00
|
|
|
+#include <avahi-client/client.h>
|
|
|
|
+#include <avahi-client/publish.h>
|
|
|
|
+#include <avahi-common/thread-watch.h>
|
2019-10-14 08:43:52 +02:00
|
|
|
+#include <xrdp.h>
|
2016-09-21 13:37:09 +02:00
|
|
|
+
|
|
|
|
+static AvahiClient *client = NULL;
|
|
|
|
+static AvahiThreadedPoll *threaded_poll = NULL;
|
|
|
|
+static AvahiEntryGroup *avahi_group = NULL;
|
|
|
|
+
|
|
|
|
+static const char *_service_name = "RDP service on %s";
|
|
|
|
+
|
|
|
|
+static void
|
|
|
|
+avahi_client_callback (AvahiClient *c,
|
|
|
|
+ AvahiClientState state,
|
|
|
|
+ void *userdata)
|
|
|
|
+{
|
|
|
|
+ switch (state) {
|
|
|
|
+ case AVAHI_CLIENT_S_RUNNING:
|
|
|
|
+ avahi_group = avahi_entry_group_new (c, 0, 0);
|
|
|
|
+ if (avahi_group)
|
|
|
|
+ {
|
|
|
|
+ char hname[512];
|
|
|
|
+ char name[576];
|
|
|
|
+ char port[8];
|
|
|
|
+
|
|
|
|
+ if (gethostname (hname, sizeof (hname)))
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ sprintf (name, _service_name, hname);
|
|
|
|
+
|
2019-10-14 08:43:52 +02:00
|
|
|
+ xrdp_avahi_get_port (port);
|
2016-09-21 13:37:09 +02:00
|
|
|
+
|
|
|
|
+ avahi_entry_group_add_service (avahi_group,
|
|
|
|
+ AVAHI_IF_UNSPEC,
|
|
|
|
+ AVAHI_PROTO_UNSPEC,
|
|
|
|
+ 0,
|
|
|
|
+ name,
|
|
|
|
+ "_rdp._tcp",
|
|
|
|
+ 0,
|
|
|
|
+ 0,
|
|
|
|
+ atoi (port),
|
|
|
|
+ NULL);
|
|
|
|
+
|
|
|
|
+ avahi_entry_group_commit (avahi_group);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case AVAHI_CLIENT_FAILURE:
|
|
|
|
+ case AVAHI_CLIENT_S_COLLISION:
|
|
|
|
+ case AVAHI_CLIENT_CONNECTING:
|
|
|
|
+ break;
|
|
|
|
+ case AVAHI_CLIENT_S_REGISTERING:
|
|
|
|
+ if (avahi_group)
|
|
|
|
+ avahi_entry_group_reset (avahi_group);
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
2017-06-30 09:57:10 +02:00
|
|
|
+int
|
2016-09-21 13:37:09 +02:00
|
|
|
+xrdp_avahi_init (void)
|
|
|
|
+{
|
|
|
|
+ if (!(threaded_poll = avahi_threaded_poll_new ()))
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ if (!(client = avahi_client_new (avahi_threaded_poll_get (threaded_poll),
|
|
|
|
+ 0,
|
|
|
|
+ avahi_client_callback,
|
|
|
|
+ NULL,
|
|
|
|
+ NULL)))
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ if (avahi_threaded_poll_start (threaded_poll) < 0)
|
|
|
|
+ return 1;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
2017-06-30 09:57:10 +02:00
|
|
|
+void
|
2016-09-21 13:37:09 +02:00
|
|
|
+xrdp_avahi_fini (void)
|
|
|
|
+{
|
|
|
|
+ avahi_threaded_poll_stop (threaded_poll);
|
|
|
|
+ if (avahi_group)
|
|
|
|
+ avahi_entry_group_free (avahi_group);
|
|
|
|
+ avahi_client_free (client);
|
|
|
|
+ avahi_threaded_poll_free (threaded_poll);
|
|
|
|
+}
|
2019-10-14 08:43:52 +02:00
|
|
|
+
|
|
|
|
+void
|
|
|
|
+xrdp_avahi_get_port(char *port)
|
|
|
|
+{
|
|
|
|
+ const int port_bytes = 8;
|
|
|
|
+ int fd;
|
|
|
|
+ char cfg_file[256];
|
|
|
|
+
|
|
|
|
+ /* default to port 3389 */
|
|
|
|
+ g_strncpy(port, "3389", port_bytes - 1);
|
|
|
|
+
|
|
|
|
+ /* see if port or address is in xrdp.ini file */
|
|
|
|
+ g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
|
|
|
|
+ fd = g_file_open(cfg_file);
|
|
|
|
+
|
|
|
|
+ if (fd != -1)
|
|
|
|
+ {
|
|
|
|
+ struct list *names;
|
|
|
|
+ struct list *values;
|
|
|
|
+
|
|
|
|
+ names = list_create();
|
|
|
|
+ names->auto_free = 1;
|
|
|
|
+ values = list_create();
|
|
|
|
+ values->auto_free = 1;
|
|
|
|
+
|
|
|
|
+ if (file_read_section(fd, "globals", names, values) == 0)
|
|
|
|
+ {
|
|
|
|
+ int index;
|
|
|
|
+ char *val;
|
|
|
|
+
|
|
|
|
+ for (index = 0; index < names->count; index++)
|
|
|
|
+ {
|
|
|
|
+ val = (char *)list_get_item(names, index);
|
|
|
|
+
|
|
|
|
+ if (val != 0)
|
|
|
|
+ {
|
|
|
|
+ if (g_strcasecmp(val, "port") == 0)
|
|
|
|
+ {
|
|
|
|
+ val = (char *)list_get_item(values, index);
|
|
|
|
+ if (val[0] == '/')
|
|
|
|
+ {
|
|
|
|
+ g_strncpy(port, val, port_bytes - 1);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ int error;
|
|
|
|
+
|
|
|
|
+ error = g_atoi(val);
|
|
|
|
+ if ((error > 0) && (error < 65000))
|
|
|
|
+ {
|
|
|
|
+ g_strncpy(port, val, port_bytes - 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ list_delete(names);
|
|
|
|
+ list_delete(values);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (fd != -1)
|
|
|
|
+ g_file_close(fd);
|
|
|
|
+}
|
|
|
|
Index: b/common/arch.h
|
|
|
|
===================================================================
|
2020-03-11 10:52:18 +01:00
|
|
|
--- a/common/arch.h 2020-03-11 15:31:17.466041360 +0800
|
|
|
|
+++ b/common/arch.h 2020-03-11 15:31:17.466041360 +0800
|
2019-10-14 08:43:52 +02:00
|
|
|
@@ -20,28 +20,7 @@
|
|
|
|
#define ARCH_H
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
-
|
|
|
|
-#if defined(HAVE_STDINT_H)
|
|
|
|
#include <stdint.h>
|
|
|
|
-#else
|
|
|
|
-typedef signed char int8_t;
|
|
|
|
-typedef unsigned char uint8_t;
|
|
|
|
-typedef signed short int16_t;
|
|
|
|
-typedef unsigned short uint16_t;
|
|
|
|
-typedef signed int int32_t;
|
|
|
|
-typedef unsigned int uint32_t;
|
|
|
|
-#if defined(_WIN64)
|
|
|
|
-typedef signed __int64 int64_t;
|
|
|
|
-typedef unsigned __int64 uint64_t;
|
|
|
|
-typedef signed __int64 intptr_t;
|
|
|
|
-typedef unsigned __int64 uintptr_t;
|
|
|
|
-#else
|
|
|
|
-typedef signed long long int64_t;
|
|
|
|
-typedef unsigned long long uint64_t;
|
|
|
|
-typedef signed long intptr_t;
|
|
|
|
-typedef unsigned long uintptr_t;
|
|
|
|
-#endif
|
|
|
|
-#endif
|
|
|
|
|
|
|
|
typedef int bool_t;
|
2016-09-21 13:37:09 +02:00
|
|
|
|