3 Commits

Author SHA256 Message Date
a014ea3d0d Accepting request 1288668 from devel:libraries:c_c++
- Update to 0.9.15
  https://github.com/LibVNC/libvncserver/releases/tag/LibVNCServer-0.9.15
  * internal code structure cleanup
  * UTF-8 clipboard handling improvements
  * HTTP server support for multithreaded VNC servers
  * Fixed building with OpenSSL >= 3.0.0
- Rebase patches
- Fix devel package dependencies. The libraries have public link
  targets that must be present when LibVNCServer-devel is
  installed
- Add upstream change to fix build failures with CMake 4:
  * 0001-CMake-require-at-least-CMake-3.5.patch
- Spec refresh

OBS-URL: https://build.opensuse.org/request/show/1288668
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/LibVNCServer?expand=0&rev=48
2025-06-27 21:00:17 +00:00
d8f52ad15d checkin
OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/LibVNCServer?expand=0&rev=72
2025-06-26 11:08:06 +00:00
94d47b9540 - Update to 0.9.15
https://github.com/LibVNC/libvncserver/releases/tag/LibVNCServer-0.9.15
  * internal code structure cleanup
  * UTF-8 clipboard handling improvements
  * HTTP server support for multithreaded VNC servers
  * Fixed building with OpenSSL >= 3.0.0
- Rebase patches
- Fix devel package dependencies. The libraries have public link
  targets that must be present when LibVNCServer-devel is
  installed
- Add upstream change to fix build failures with CMake 4:
  * 0001-CMake-require-at-least-CMake-3.5.patch
- Spec refresh

OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/LibVNCServer?expand=0&rev=71
2025-06-26 11:04:22 +00:00
8 changed files with 231 additions and 182 deletions

View File

@@ -0,0 +1,25 @@
From e64fa928170f22a2e21b5bbd6d46c8f8e7dd7a96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matti=20Lehtim=C3=A4ki?= <matti.lehtimaki@jolla.com>
Date: Tue, 13 May 2025 08:37:07 +0300
Subject: [PATCH] CMake: require at least CMake 3.5
CMake 4 dropped support for version requirements < 3.5.
Fixes building with CMake >= 4.
---
CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 205f3928..9b8118c8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.4)
+cmake_minimum_required(VERSION 3.5)
set(PROJECT_LANGUAGES C)
--
2.50.0

View File

@@ -1,22 +1,66 @@
From e4849b01fec4494057728d1aa3a165ed21705682 Mon Sep 17 00:00:00 2001 From e4849b01fec4494057728d1aa3a165ed21705682 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 11 Jun 2018 23:47:02 +0200 Date: Mon, 11 Jun 2018 23:47:02 +0200
Subject: [PATCH 1/4] libvncserver: Add API to add custom I/O entry points Subject: [PATCH] libvncserver: Add API to add custom I/O entry points
Add API to make it possible to channel RFB input and output through Add API to make it possible to channel RFB input and output through
another layer, for example TLS. This is done by making it possible to another layer, for example TLS. This is done by making it possible to
override the default read/write/peek functions. override the default read/write/peek functions.
--- ---
libvncserver/rfbserver.c | 4 ++ include/rfb/rfb.h | 17 ++++++++
libvncserver/sockets.c | 79 ++++++++++++++++++++++++++++++++++++---- src/libvncserver/rfbserver.c | 4 ++
rfb/rfb.h | 17 +++++++++ src/libvncserver/sockets.c | 79 ++++++++++++++++++++++++++++++++----
3 files changed, 93 insertions(+), 7 deletions(-) 3 files changed, 93 insertions(+), 7 deletions(-)
Index: libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c diff --git a/include/rfb/rfb.h b/include/rfb/rfb.h
=================================================================== index 50acf24..204fa05 100644
--- libvncserver-LibVNCServer-0.9.14.orig/libvncserver/rfbserver.c --- a/include/rfb/rfb.h
+++ libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c +++ b/include/rfb/rfb.h
@@ -321,6 +321,10 @@ rfbNewTCPOrUDPClient(rfbScreenInfoPtr rf @@ -402,6 +402,14 @@ typedef struct sraRegion* sraRegionPtr;
typedef void (*ClientGoneHookPtr)(struct _rfbClientRec* cl);
typedef void (*ClientFramebufferUpdateRequestHookPtr)(struct _rfbClientRec* cl, rfbFramebufferUpdateRequestMsg* furMsg);
+typedef int (*ClientReadFromSocket)(struct _rfbClientRec* cl,
+ char *buf, int len);
+typedef int (*ClientPeekAtSocket)(struct _rfbClientRec* cl,
+ char *buf, int len);
+typedef rfbBool (*ClientHasPendingOnSocket)(struct _rfbClientRec* cl);
+typedef int (*ClientWriteToSocket)(struct _rfbClientRec* cl,
+ const char *buf, int len);
+
typedef struct _rfbFileTransferData {
int fd;
int compressionEnabled;
@@ -711,6 +719,11 @@ typedef struct _rfbClientRec {
int tightPngDstDataLen;
#endif
#endif
+
+ ClientReadFromSocket readFromSocket; /* Read data from socket */
+ ClientPeekAtSocket peekAtSocket; /* Peek at data from socket */
+ ClientHasPendingOnSocket hasPendingOnSocket; /* Peek at data from socket */
+ ClientWriteToSocket writeToSocket; /* Write data to socket */
} rfbClientRec, *rfbClientPtr;
/**
@@ -763,8 +776,12 @@ extern void rfbDisconnectUDPSock(rfbScreenInfoPtr rfbScreen);
extern void rfbCloseClient(rfbClientPtr cl);
extern int rfbReadExact(rfbClientPtr cl, char *buf, int len);
extern int rfbReadExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
+extern int rfbDefaultReadFromSocket(rfbClientPtr cl, char *buf, int len);
extern int rfbPeekExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
+extern int rfbDefaultPeekAtSocket(rfbClientPtr cl, char *buf, int len);
+extern rfbBool rfbDefaultHasPendingOnSocket(rfbClientPtr cl);
extern int rfbWriteExact(rfbClientPtr cl, const char *buf, int len);
+extern int rfbDefaultWriteToSocket(rfbClientPtr cl, const char *buf, int len);
extern int rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec);
extern rfbSocket rfbConnect(rfbScreenInfoPtr rfbScreen, char* host, int port);
extern rfbSocket rfbConnectToTcpAddr(char* host, int port);
diff --git a/src/libvncserver/rfbserver.c b/src/libvncserver/rfbserver.c
index 8e3c3f6..2385dba 100644
--- a/src/libvncserver/rfbserver.c
+++ b/src/libvncserver/rfbserver.c
@@ -321,6 +321,10 @@ rfbNewTCPOrUDPClient(rfbScreenInfoPtr rfbScreen,
cl->screen = rfbScreen; cl->screen = rfbScreen;
cl->sock = sock; cl->sock = sock;
@@ -27,21 +71,21 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c
cl->viewOnly = FALSE; cl->viewOnly = FALSE;
/* setup pseudo scaling */ /* setup pseudo scaling */
cl->scaledScreen = rfbScreen; cl->scaledScreen = rfbScreen;
Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c diff --git a/src/libvncserver/sockets.c b/src/libvncserver/sockets.c
=================================================================== index c18493c..51cc86b 100644
--- libvncserver-LibVNCServer-0.9.14.orig/libvncserver/sockets.c --- a/src/libvncserver/sockets.c
+++ libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c +++ b/src/libvncserver/sockets.c
@@ -102,6 +102,9 @@ int rfbMaxClientWait = 20000; /* time @@ -101,6 +101,9 @@ int deny_severity=LOG_WARNING;
int rfbMaxClientWait = 20000; /* time (ms) after which we decide client has
gone away - needed to stop us hanging */ gone away - needed to stop us hanging */
static rfbBool +static rfbBool
+rfbHasPendingOnSocket(rfbClientPtr cl); +rfbHasPendingOnSocket(rfbClientPtr cl);
+ +
+static rfbBool static rfbBool
rfbNewConnectionFromSock(rfbScreenInfoPtr rfbScreen, rfbSocket sock) rfbNewConnectionFromSock(rfbScreenInfoPtr rfbScreen, rfbSocket sock)
{ {
const int one = 1; @@ -364,16 +367,20 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
@@ -364,16 +367,20 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,l
tv.tv_usec = usec; tv.tv_usec = usec;
nfds = select(rfbScreen->maxFd + 1, &fds, NULL, NULL /* &fds */, &tv); nfds = select(rfbScreen->maxFd + 1, &fds, NULL, NULL /* &fds */, &tv);
if (nfds == 0) { if (nfds == 0) {
@@ -63,7 +107,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
} }
if (nfds < 0) { if (nfds < 0) {
@@ -449,9 +456,11 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,l @@ -449,9 +456,11 @@ rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
if (cl->onHold) if (cl->onHold)
continue; continue;
@@ -77,9 +121,9 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
{ {
#ifdef LIBVNCSERVER_WITH_WEBSOCKETS #ifdef LIBVNCSERVER_WITH_WEBSOCKETS
do { do {
@@ -638,6 +647,30 @@ rfbConnect(rfbScreenInfoPtr rfbScreen, @@ -649,6 +658,30 @@ size_t fuzz_size;
return sock; const uint8_t *fuzz_data;
} #endif
+int +int
+rfbDefaultReadFromSocket(rfbClientPtr cl, char *buf, int len) +rfbDefaultReadFromSocket(rfbClientPtr cl, char *buf, int len)
@@ -108,7 +152,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
/* /*
* ReadExact reads an exact number of bytes from a client. Returns 1 if * ReadExact reads an exact number of bytes from a client. Returns 1 if
* those bytes have been read, 0 if the other end has closed, or -1 if an error * those bytes have been read, 0 if the other end has closed, or -1 if an error
@@ -659,10 +692,10 @@ rfbReadExactTimeout(rfbClientPtr cl, cha @@ -678,10 +711,10 @@ rfbReadExactTimeout(rfbClientPtr cl, char* buf, int len, int timeout)
} else if (cl->sslctx) { } else if (cl->sslctx) {
n = rfbssl_read(cl, buf, len); n = rfbssl_read(cl, buf, len);
} else { } else {
@@ -121,7 +165,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
#endif #endif
if (n > 0) { if (n > 0) {
@@ -694,6 +727,10 @@ rfbReadExactTimeout(rfbClientPtr cl, cha @@ -713,6 +746,10 @@ rfbReadExactTimeout(rfbClientPtr cl, char* buf, int len, int timeout)
continue; continue;
} }
#endif #endif
@@ -132,7 +176,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
FD_ZERO(&fds); FD_ZERO(&fds);
FD_SET(sock, &fds); FD_SET(sock, &fds);
tv.tv_sec = timeout / 1000; tv.tv_sec = timeout / 1000;
@@ -730,6 +767,18 @@ int rfbReadExact(rfbClientPtr cl,char* b @@ -749,6 +786,18 @@ int rfbReadExact(rfbClientPtr cl,char* buf,int len)
return(rfbReadExactTimeout(cl,buf,len,rfbMaxClientWait)); return(rfbReadExactTimeout(cl,buf,len,rfbMaxClientWait));
} }
@@ -151,7 +195,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
/* /*
* PeekExact peeks at an exact number of bytes from a client. Returns 1 if * PeekExact peeks at an exact number of bytes from a client. Returns 1 if
* those bytes have been read, 0 if the other end has closed, or -1 if an * those bytes have been read, 0 if the other end has closed, or -1 if an
@@ -750,7 +799,7 @@ rfbPeekExactTimeout(rfbClientPtr cl, cha @@ -777,7 +826,7 @@ rfbPeekExactTimeout(rfbClientPtr cl, char* buf, int len, int timeout)
n = rfbssl_peek(cl, buf, len); n = rfbssl_peek(cl, buf, len);
else else
#endif #endif
@@ -160,7 +204,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
if (n == len) { if (n == len) {
@@ -806,6 +855,22 @@ rfbPeekExactTimeout(rfbClientPtr cl, cha @@ -833,6 +882,22 @@ rfbPeekExactTimeout(rfbClientPtr cl, char* buf, int len, int timeout)
return 1; return 1;
} }
@@ -183,7 +227,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
/* /*
* WriteExact writes an exact number of bytes to a client. Returns 1 if * WriteExact writes an exact number of bytes to a client. Returns 1 if
* those bytes have been written, or -1 if an error occurred (errno is set to * those bytes have been written, or -1 if an error occurred (errno is set to
@@ -863,7 +928,7 @@ rfbWriteExact(rfbClientPtr cl, @@ -893,7 +958,7 @@ rfbWriteExact(rfbClientPtr cl,
n = rfbssl_write(cl, buf, len); n = rfbssl_write(cl, buf, len);
else else
#endif #endif
@@ -192,47 +236,6 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/sockets.c
if (n > 0) { if (n > 0) {
Index: libvncserver-LibVNCServer-0.9.14/rfb/rfb.h --
=================================================================== 2.50.0
--- libvncserver-LibVNCServer-0.9.14.orig/rfb/rfb.h
+++ libvncserver-LibVNCServer-0.9.14/rfb/rfb.h
@@ -398,6 +398,14 @@ typedef struct sraRegion* sraRegionPtr;
typedef void (*ClientGoneHookPtr)(struct _rfbClientRec* cl);
typedef void (*ClientFramebufferUpdateRequestHookPtr)(struct _rfbClientRec* cl, rfbFramebufferUpdateRequestMsg* furMsg);
+typedef int (*ClientReadFromSocket)(struct _rfbClientRec* cl,
+ char *buf, int len);
+typedef int (*ClientPeekAtSocket)(struct _rfbClientRec* cl,
+ char *buf, int len);
+typedef rfbBool (*ClientHasPendingOnSocket)(struct _rfbClientRec* cl);
+typedef int (*ClientWriteToSocket)(struct _rfbClientRec* cl,
+ const char *buf, int len);
+
typedef struct _rfbFileTransferData {
int fd;
int compressionEnabled;
@@ -707,6 +715,11 @@ typedef struct _rfbClientRec {
int tightPngDstDataLen;
#endif
#endif
+
+ ClientReadFromSocket readFromSocket; /* Read data from socket */
+ ClientPeekAtSocket peekAtSocket; /* Peek at data from socket */
+ ClientHasPendingOnSocket hasPendingOnSocket; /* Peek at data from socket */
+ ClientWriteToSocket writeToSocket; /* Write data to socket */
} rfbClientRec, *rfbClientPtr;
/**
@@ -759,8 +772,12 @@ extern void rfbDisconnectUDPSock(rfbScre
extern void rfbCloseClient(rfbClientPtr cl);
extern int rfbReadExact(rfbClientPtr cl, char *buf, int len);
extern int rfbReadExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
+extern int rfbDefaultReadFromSocket(rfbClientPtr cl, char *buf, int len);
extern int rfbPeekExactTimeout(rfbClientPtr cl, char *buf, int len,int timeout);
+extern int rfbDefaultPeekAtSocket(rfbClientPtr cl, char *buf, int len);
+extern rfbBool rfbDefaultHasPendingOnSocket(rfbClientPtr cl);
extern int rfbWriteExact(rfbClientPtr cl, const char *buf, int len);
+extern int rfbDefaultWriteToSocket(rfbClientPtr cl, const char *buf, int len);
extern int rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec);
extern rfbSocket rfbConnect(rfbScreenInfoPtr rfbScreen, char* host, int port);
extern rfbSocket rfbConnectToTcpAddr(char* host, int port);

View File

@@ -1,7 +1,7 @@
From c9131a78878a785c3de21e9d49521d7b68400ad7 Mon Sep 17 00:00:00 2001 From c9131a78878a785c3de21e9d49521d7b68400ad7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 11 Jun 2018 23:50:05 +0200 Date: Mon, 11 Jun 2018 23:50:05 +0200
Subject: [PATCH 2/4] libvncserver: Add channel security handlers Subject: [PATCH] libvncserver: Add channel security handlers
Add another type of security handler that is meant to be used initially Add another type of security handler that is meant to be used initially
to set up a secure channel. Regular security handlers would be to set up a secure channel. Regular security handlers would be
@@ -13,16 +13,67 @@ done by adding a single channel security handler with the rfbTLS (18)
with a handler that initiates a TLS session, and when a TLS session is with a handler that initiates a TLS session, and when a TLS session is
initiated, the regular security handler list is sent. initiated, the regular security handler list is sent.
--- ---
libvncserver/auth.c | 164 ++++++++++++++++++++++++++++++--------- include/rfb/rfb.h | 12 ++-
libvncserver/rfbserver.c | 1 + src/libvncserver/auth.c | 164 +++++++++++++++++++++++++++--------
rfb/rfb.h | 15 +++- src/libvncserver/rfbserver.c | 1 +
3 files changed, 142 insertions(+), 38 deletions(-) 3 files changed, 140 insertions(+), 37 deletions(-)
Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c diff --git a/include/rfb/rfb.h b/include/rfb/rfb.h
=================================================================== index 204fa05..cac953c 100644
--- libvncserver-LibVNCServer-0.9.14.orig/libvncserver/auth.c --- a/include/rfb/rfb.h
+++ libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c +++ b/include/rfb/rfb.h
@@ -37,18 +37,17 @@ void rfbClientSendString(rfbClientPtr cl @@ -147,6 +147,11 @@ typedef struct {
} data; /**< there have to be count*3 entries */
} rfbColourMap;
+enum rfbSecurityTag {
+ RFB_SECURITY_TAG_NONE = 0,
+ RFB_SECURITY_TAG_CHANNEL = 1 << 0
+};
+
/**
* Security handling (RFB protocol version 3.7)
*/
@@ -155,6 +160,7 @@ typedef struct _rfbSecurity {
uint8_t type;
void (*handler)(struct _rfbClientRec* cl);
struct _rfbSecurity* next;
+ enum rfbSecurityTag securityTags;
} rfbSecurityHandler;
/**
@@ -495,7 +501,7 @@ typedef struct _rfbClientRec {
/** Possible client states: */
enum {
RFB_PROTOCOL_VERSION, /**< establishing protocol version */
- RFB_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
+ RFB_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
RFB_AUTHENTICATION, /**< authenticating */
RFB_INITIALISATION, /**< sending initialisation messages */
RFB_NORMAL, /**< normal protocol messages */
@@ -504,6 +510,7 @@ typedef struct _rfbClientRec {
* using LibVNCServer to provide services: */
RFB_INITIALISATION_SHARED, /**< sending initialisation messages with implicit shared-flag already true */
+ RFB_CHANNEL_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
RFB_SHUTDOWN /**< Client is shutting down */
} state;
@@ -874,6 +881,9 @@ extern void rfbProcessClientSecurityType(rfbClientPtr cl);
extern void rfbAuthProcessClientMessage(rfbClientPtr cl);
extern void rfbRegisterSecurityHandler(rfbSecurityHandler* handler);
extern void rfbUnregisterSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbRegisterChannelSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbUnregisterChannelSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbSendSecurityTypeList(rfbClientPtr cl, enum rfbSecurityTag exclude);
/* rre.c */
diff --git a/src/libvncserver/auth.c b/src/libvncserver/auth.c
index 748027b..fc74c80 100644
--- a/src/libvncserver/auth.c
+++ b/src/libvncserver/auth.c
@@ -37,18 +37,17 @@ void rfbClientSendString(rfbClientPtr cl, const char *reason);
* Handle security types * Handle security types
*/ */
@@ -48,7 +99,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
if(handler == NULL) if(handler == NULL)
return; return;
@@ -57,39 +56,35 @@ rfbRegisterSecurityHandler(rfbSecurityHa @@ -57,39 +56,35 @@ rfbRegisterSecurityHandler(rfbSecurityHandler* handler)
while(head != NULL) { while(head != NULL) {
if(head == handler) { if(head == handler) {
@@ -99,7 +150,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
while(cur) { while(cur) {
if(cur == handler) { if(cur == handler) {
@@ -99,7 +94,50 @@ rfbUnregisterSecurityHandler(rfbSecurity @@ -99,7 +94,50 @@ rfbUnregisterSecurityHandler(rfbSecurityHandler* handler)
pre = cur; pre = cur;
cur = cur->next; cur = cur->next;
} }
@@ -151,7 +202,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
} }
/* /*
@@ -197,9 +235,22 @@ static rfbSecurityHandler VncSecurityHan @@ -197,9 +235,22 @@ static rfbSecurityHandler VncSecurityHandlerNone = {
NULL NULL
}; };
@@ -176,7 +227,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
{ {
/* The size of the message is the count of security types +1, /* The size of the message is the count of security types +1,
* since the first byte is the number of types. */ * since the first byte is the number of types. */
@@ -207,9 +258,10 @@ rfbSendSecurityTypeList(rfbClientPtr cl, @@ -207,9 +258,10 @@ rfbSendSecurityTypeList(rfbClientPtr cl, int primaryType)
rfbSecurityHandler* handler; rfbSecurityHandler* handler;
#define MAX_SECURITY_TYPES 255 #define MAX_SECURITY_TYPES 255
uint8_t buffer[MAX_SECURITY_TYPES+1]; uint8_t buffer[MAX_SECURITY_TYPES+1];
@@ -188,7 +239,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
switch (primaryType) { switch (primaryType) {
case rfbSecTypeNone: case rfbSecTypeNone:
rfbUnregisterSecurityHandler(&VncSecurityHandlerVncAuth); rfbUnregisterSecurityHandler(&VncSecurityHandlerVncAuth);
@@ -223,6 +275,9 @@ rfbSendSecurityTypeList(rfbClientPtr cl, @@ -223,6 +275,9 @@ rfbSendSecurityTypeList(rfbClientPtr cl, int primaryType)
for (handler = securityHandlers; for (handler = securityHandlers;
handler && size<MAX_SECURITY_TYPES; handler = handler->next) { handler && size<MAX_SECURITY_TYPES; handler = handler->next) {
@@ -198,7 +249,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
buffer[size] = handler->type; buffer[size] = handler->type;
size++; size++;
} }
@@ -251,7 +306,29 @@ rfbSendSecurityTypeList(rfbClientPtr cl, @@ -251,7 +306,29 @@ rfbSendSecurityTypeList(rfbClientPtr cl, int primaryType)
cl->state = RFB_SECURITY_TYPE; cl->state = RFB_SECURITY_TYPE;
} }
@@ -228,7 +279,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
/* /*
@@ -299,18 +376,19 @@ rfbSendSecurityType(rfbClientPtr cl, int @@ -299,18 +376,19 @@ rfbSendSecurityType(rfbClientPtr cl, int32_t securityType)
void void
rfbAuthNewClient(rfbClientPtr cl) rfbAuthNewClient(rfbClientPtr cl)
{ {
@@ -270,7 +321,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
} }
} }
@@ -334,6 +416,7 @@ rfbProcessClientSecurityType(rfbClientPt @@ -334,6 +416,7 @@ rfbProcessClientSecurityType(rfbClientPtr cl)
int n; int n;
uint8_t chosenType; uint8_t chosenType;
rfbSecurityHandler* handler; rfbSecurityHandler* handler;
@@ -278,7 +329,7 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
/* Read the security type. */ /* Read the security type. */
n = rfbReadExact(cl, (char *)&chosenType, 1); n = rfbReadExact(cl, (char *)&chosenType, 1);
@@ -346,8 +429,17 @@ rfbProcessClientSecurityType(rfbClientPt @@ -346,8 +429,17 @@ rfbProcessClientSecurityType(rfbClientPtr cl)
return; return;
} }
@@ -297,11 +348,11 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/auth.c
if (chosenType == handler->type) { if (chosenType == handler->type) {
rfbLog("rfbProcessClientSecurityType: executing handler for type %d\n", chosenType); rfbLog("rfbProcessClientSecurityType: executing handler for type %d\n", chosenType);
handler->handler(cl); handler->handler(cl);
Index: libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c diff --git a/src/libvncserver/rfbserver.c b/src/libvncserver/rfbserver.c
=================================================================== index 2385dba..b2804ad 100644
--- libvncserver-LibVNCServer-0.9.14.orig/libvncserver/rfbserver.c --- a/src/libvncserver/rfbserver.c
+++ libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c +++ b/src/libvncserver/rfbserver.c
@@ -670,6 +670,7 @@ rfbProcessClientMessage(rfbClientPtr cl) @@ -679,6 +679,7 @@ rfbProcessClientMessage(rfbClientPtr cl)
case RFB_PROTOCOL_VERSION: case RFB_PROTOCOL_VERSION:
rfbProcessClientProtocolVersion(cl); rfbProcessClientProtocolVersion(cl);
return; return;
@@ -309,54 +360,6 @@ Index: libvncserver-LibVNCServer-0.9.14/libvncserver/rfbserver.c
case RFB_SECURITY_TYPE: case RFB_SECURITY_TYPE:
rfbProcessClientSecurityType(cl); rfbProcessClientSecurityType(cl);
return; return;
Index: libvncserver-LibVNCServer-0.9.14/rfb/rfb.h --
=================================================================== 2.50.0
--- libvncserver-LibVNCServer-0.9.14.orig/rfb/rfb.h
+++ libvncserver-LibVNCServer-0.9.14/rfb/rfb.h
@@ -147,6 +147,11 @@ typedef struct {
} data; /**< there have to be count*3 entries */
} rfbColourMap;
+enum rfbSecurityTag {
+ RFB_SECURITY_TAG_NONE = 0,
+ RFB_SECURITY_TAG_CHANNEL = 1 << 0
+};
+
/**
* Security handling (RFB protocol version 3.7)
*/
@@ -155,6 +160,7 @@ typedef struct _rfbSecurity {
uint8_t type;
void (*handler)(struct _rfbClientRec* cl);
struct _rfbSecurity* next;
+ enum rfbSecurityTag securityTags;
} rfbSecurityHandler;
/**
@@ -491,7 +497,7 @@ typedef struct _rfbClientRec {
/** Possible client states: */
enum {
RFB_PROTOCOL_VERSION, /**< establishing protocol version */
- RFB_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
+ RFB_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
RFB_AUTHENTICATION, /**< authenticating */
RFB_INITIALISATION, /**< sending initialisation messages */
RFB_NORMAL, /**< normal protocol messages */
@@ -500,6 +506,7 @@ typedef struct _rfbClientRec {
* using LibVNCServer to provide services: */
RFB_INITIALISATION_SHARED, /**< sending initialisation messages with implicit shared-flag already true */
+ RFB_CHANNEL_SECURITY_TYPE, /**< negotiating security (RFB v.3.7) */
RFB_SHUTDOWN /**< Client is shutting down */
} state;
@@ -870,6 +877,9 @@ extern void rfbProcessClientSecurityType
extern void rfbAuthProcessClientMessage(rfbClientPtr cl);
extern void rfbRegisterSecurityHandler(rfbSecurityHandler* handler);
extern void rfbUnregisterSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbRegisterChannelSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbUnregisterChannelSecurityHandler(rfbSecurityHandler* handler);
+extern void rfbSendSecurityTypeList(rfbClientPtr cl, enum rfbSecurityTag exclude);
/* rre.c */

BIN
LibVNCServer-0.9.14.tar.gz (Stored with Git LFS)

Binary file not shown.

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:62352c7795e231dfce044beb96156065a05a05c974e5de9e023d688d8ff675d7
size 600387

View File

@@ -1,3 +1,20 @@
-------------------------------------------------------------------
Thu Jun 26 07:53:57 UTC 2025 - Christophe Marin <christophe@krop.fr>
- Update to 0.9.15
https://github.com/LibVNC/libvncserver/releases/tag/LibVNCServer-0.9.15
* internal code structure cleanup
* UTF-8 clipboard handling improvements
* HTTP server support for multithreaded VNC servers
* Fixed building with OpenSSL >= 3.0.0
- Rebase patches
- Fix devel package dependencies. The libraries have public link
targets that must be present when LibVNCServer-devel is
installed
- Add upstream change to fix build failures with CMake 4:
* 0001-CMake-require-at-least-CMake-3.5.patch
- Spec refresh
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Jun 23 14:44:58 UTC 2023 - pgajdos@suse.com Fri Jun 23 14:44:58 UTC 2023 - pgajdos@suse.com
@@ -581,4 +598,3 @@ Sun Aug 21 03:27:19 CEST 2005 - garloff@suse.de
- Initial creation of package LibVNCServer-0.7.1. - Initial creation of package LibVNCServer-0.7.1.
-------------------------------------------------------------------

View File

@@ -18,7 +18,7 @@
%define libnum 1 %define libnum 1
Name: LibVNCServer Name: LibVNCServer
Version: 0.9.14 Version: 0.9.15
Release: 0 Release: 0
Summary: VNC Development Library Summary: VNC Development Library
License: GPL-2.0-or-later License: GPL-2.0-or-later
@@ -29,6 +29,8 @@ Source0: https://github.com/LibVNC/libvncserver/archive/%{name}-%{version
Source1: baselibs.conf Source1: baselibs.conf
#PATCH-FIX-OPENSUSE: redefine keysyms only if needed #PATCH-FIX-OPENSUSE: redefine keysyms only if needed
Patch0: redef-keysym.patch Patch0: redef-keysym.patch
# PATCH-FIX-UPSTREAM -- CMake 4 compat
Patch1: 0001-CMake-require-at-least-CMake-3.5.patch
#PATCH-FEATURE-UPSTREAM TLS security type enablement patches gh#LibVNC/libvncserver!234 #PATCH-FEATURE-UPSTREAM TLS security type enablement patches gh#LibVNC/libvncserver!234
Patch10: 0001-libvncserver-Add-API-to-add-custom-I-O-entry-points.patch Patch10: 0001-libvncserver-Add-API-to-add-custom-I-O-entry-points.patch
Patch11: 0002-libvncserver-Add-channel-security-handlers.patch Patch11: 0002-libvncserver-Add-channel-security-handlers.patch
@@ -43,7 +45,6 @@ BuildRequires: lzo-devel
BuildRequires: openssl-devel BuildRequires: openssl-devel
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: slang-devel BuildRequires: slang-devel
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description %description
VNC is a set of programs using the RFB (Remote Frame Buffer) protocol. VNC is a set of programs using the RFB (Remote Frame Buffer) protocol.
@@ -60,8 +61,8 @@ real running X11 server) has been split off into its own package on
%package -n libvncclient%{libnum} %package -n libvncclient%{libnum}
Summary: Library implementing a VNC client Summary: Library implementing a VNC client
Group: System/Libraries Group: System/Libraries
Conflicts: LibVNCServer < %{version}
Obsoletes: linuxvnc < %{version} Obsoletes: linuxvnc < %{version}
Conflicts: LibVNCServer < %version
%description -n libvncclient%{libnum} %description -n libvncclient%{libnum}
LibVNCServer/LibVNCClient are cross-platform C libraries that allow LibVNCServer/LibVNCClient are cross-platform C libraries that allow
@@ -76,12 +77,18 @@ LibVNCServer/LibVNCClient are cross-platform C libraries that allow
implementing VNC server or client functionality in your program. implementing VNC server or client functionality in your program.
%package devel %package devel
Requires: gnutls-devel
Requires: libvncclient%{libnum} = %version
Requires: libvncserver%{libnum} = %version
Requires: zlib-devel
Summary: VNC Development Library Summary: VNC Development Library
Group: Development/Libraries/X11 Group: Development/Libraries/X11
Requires: gnutls-devel
Requires: libgcrypt-devel
Requires: libgnutls-devel
Requires: libjpeg-devel
Requires: libpng-devel
Requires: libvncclient%{libnum} = %{version}
Requires: libvncserver%{libnum} = %{version}
Requires: lzo-devel
Requires: openssl-devel
Requires: zlib-devel
%description devel %description devel
VNC is a set of programs using the RFB (Remote Frame Buffer) protocol. VNC is a set of programs using the RFB (Remote Frame Buffer) protocol.
@@ -97,8 +104,7 @@ The LibVNCServer-devel package contains the static libraries and header
files for LibVNCServer. files for LibVNCServer.
%prep %prep
%setup -q -n libvncserver-%{name}-%{version} %autosetup -p1 -n libvncserver-%{name}-%{version}
%autopatch -p1
# fix encoding # fix encoding
for file in ChangeLog ; do for file in ChangeLog ; do
@@ -109,38 +115,34 @@ done
%build %build
%cmake %cmake
make %{?_smp_mflags} %cmake_build
%check %check
pushd build %ctest
export LD_LIBRARY_PATH="$(pwd)"
make test
%install %install
%cmake_install %cmake_install
%post -n libvncclient%{libnum} -p /sbin/ldconfig %ldconfig_scriptlets -n libvncclient%{libnum}
%postun -n libvncclient%{libnum} -p /sbin/ldconfig %ldconfig_scriptlets -n libvncserver%{libnum}
%post -n libvncserver%{libnum} -p /sbin/ldconfig
%postun -n libvncserver%{libnum} -p /sbin/ldconfig
%files -n libvncserver%{libnum} %files -n libvncserver%{libnum}
%defattr(-,root,root) %license COPYING
%doc COPYING README.md %doc README.md
%_libdir/libvncserver.so.%{version} %{_libdir}/libvncserver.so.%{version}
%_libdir/libvncserver.so.%{libnum}* %{_libdir}/libvncserver.so.%{libnum}*
%files -n libvncclient%{libnum} %files -n libvncclient%{libnum}
%defattr(-,root,root) %license COPYING
%doc COPYING README.md %doc README.md
%_libdir/libvncclient.so.%{version} %{_libdir}/libvncclient.so.%{version}
%_libdir/libvncclient.so.%{libnum}* %{_libdir}/libvncclient.so.%{libnum}*
%files devel %files devel
%defattr(-,root,root) %license COPYING
%doc AUTHORS COPYING ChangeLog NEWS.md README.md %doc AUTHORS ChangeLog NEWS.md README.md
%{_includedir}/rfb/* %{_includedir}/rfb/*
%dir /usr/include/rfb %dir %{_includedir}/rfb
%{_libdir}/libvncclient.so %{_libdir}/libvncclient.so
%{_libdir}/libvncserver.so %{_libdir}/libvncserver.so
%{_libdir}/pkgconfig/*.pc %{_libdir}/pkgconfig/*.pc

View File

@@ -1,7 +1,7 @@
Index: LibVNCServer-0.8.2/rfb/keysym.h Index: LibVNCServer-0.8.2/include/rfb/keysym.h
=================================================================== ===================================================================
--- LibVNCServer-0.8.2.orig/rfb/keysym.h --- LibVNCServer-0.8.2.orig/include/rfb/keysym.h
+++ LibVNCServer-0.8.2/rfb/keysym.h +++ LibVNCServer-0.8.2/include/rfb/keysym.h
@@ -50,15 +50,29 @@ SOFTWARE. @@ -50,15 +50,29 @@ SOFTWARE.
******************************************************************/ ******************************************************************/