diff --git a/.freerdp.metadata b/.freerdp.metadata deleted file mode 100644 index 8d7363b..0000000 --- a/.freerdp.metadata +++ /dev/null @@ -1 +0,0 @@ -14a73f092e227a77f3d483658033d15d4501a753 SOURCES/FreeRDP-2.11.7.tar.gz diff --git a/.gitignore b/.gitignore index 21aec21..4307915 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/FreeRDP-2.11.7.tar.gz \ No newline at end of file +FreeRDP-3.6.3-repack.tar.gz diff --git a/SOURCES/Revert-Moved-clipboard-utils-to-core-library-fixes-6.patch b/SOURCES/Revert-Moved-clipboard-utils-to-core-library-fixes-6.patch deleted file mode 100644 index 8b29309..0000000 --- a/SOURCES/Revert-Moved-clipboard-utils-to-core-library-fixes-6.patch +++ /dev/null @@ -1,560 +0,0 @@ -From a441e68fccc8ef137c9e8e667fed6adaab34ba37 Mon Sep 17 00:00:00 2001 -From: Ondrej Holy -Date: Tue, 1 Oct 2024 15:43:07 +0200 -Subject: [PATCH] Revert "Moved clipboard utils to core library, fixes #6760 - (#7752)" - -This reverts commit 26a83e6ccde272c1bbc2b2591325dc7a493811bc. ---- - channels/cliprdr/client/cliprdr_format.c | 195 +++++++++++++++++++ - include/freerdp/channels/cliprdr.h | 12 +- - include/freerdp/utils/cliprdr_utils.h | 48 ----- - libfreerdp/utils/CMakeLists.txt | 1 - - libfreerdp/utils/cliprdr_utils.c | 235 ----------------------- - 5 files changed, 206 insertions(+), 285 deletions(-) - delete mode 100644 include/freerdp/utils/cliprdr_utils.h - delete mode 100644 libfreerdp/utils/cliprdr_utils.c - -diff --git a/channels/cliprdr/client/cliprdr_format.c b/channels/cliprdr/client/cliprdr_format.c -index 0b6111b96..4c31a1b08 100644 ---- a/channels/cliprdr/client/cliprdr_format.c -+++ b/channels/cliprdr/client/cliprdr_format.c -@@ -173,3 +173,198 @@ UINT cliprdr_process_format_data_response(cliprdrPlugin* cliprdr, wStream* s, UI - - return error; - } -+ -+static UINT64 filetime_to_uint64(FILETIME value) -+{ -+ UINT64 converted = 0; -+ converted |= (UINT32)value.dwHighDateTime; -+ converted <<= 32; -+ converted |= (UINT32)value.dwLowDateTime; -+ return converted; -+} -+ -+static FILETIME uint64_to_filetime(UINT64 value) -+{ -+ FILETIME converted; -+ converted.dwLowDateTime = (UINT32)(value >> 0); -+ converted.dwHighDateTime = (UINT32)(value >> 32); -+ return converted; -+} -+ -+#define CLIPRDR_FILEDESCRIPTOR_SIZE (4 + 32 + 4 + 16 + 8 + 8 + 520) -+ -+/** -+ * Parse a packed file list. -+ * -+ * The resulting array must be freed with the `free()` function. -+ * -+ * @param [in] format_data packed `CLIPRDR_FILELIST` to parse. -+ * @param [in] format_data_length length of `format_data` in bytes. -+ * @param [out] file_descriptor_array parsed array of `FILEDESCRIPTOR` structs. -+ * @param [out] file_descriptor_count number of elements in `file_descriptor_array`. -+ * -+ * @returns 0 on success, otherwise a Win32 error code. -+ */ -+UINT cliprdr_parse_file_list(const BYTE* format_data, UINT32 format_data_length, -+ FILEDESCRIPTORW** file_descriptor_array, UINT32* file_descriptor_count) -+{ -+ UINT result = NO_ERROR; -+ UINT32 i; -+ UINT32 count = 0; -+ wStream* s = NULL; -+ -+ if (!format_data || !file_descriptor_array || !file_descriptor_count) -+ return ERROR_BAD_ARGUMENTS; -+ -+ s = Stream_New((BYTE*)format_data, format_data_length); -+ if (!s) -+ return ERROR_NOT_ENOUGH_MEMORY; -+ -+ if (Stream_GetRemainingLength(s) < 4) -+ { -+ WLog_ERR(TAG, "invalid packed file list"); -+ -+ result = ERROR_INCORRECT_SIZE; -+ goto out; -+ } -+ -+ Stream_Read_UINT32(s, count); /* cItems (4 bytes) */ -+ -+ if (Stream_GetRemainingLength(s) / CLIPRDR_FILEDESCRIPTOR_SIZE < count) -+ { -+ WLog_ERR(TAG, "packed file list is too short: expected %" PRIuz ", have %" PRIuz, -+ ((size_t)count) * CLIPRDR_FILEDESCRIPTOR_SIZE, Stream_GetRemainingLength(s)); -+ -+ result = ERROR_INCORRECT_SIZE; -+ goto out; -+ } -+ -+ *file_descriptor_count = count; -+ *file_descriptor_array = calloc(count, sizeof(FILEDESCRIPTORW)); -+ if (!*file_descriptor_array) -+ { -+ result = ERROR_NOT_ENOUGH_MEMORY; -+ goto out; -+ } -+ -+ for (i = 0; i < count; i++) -+ { -+ int c; -+ UINT64 lastWriteTime; -+ FILEDESCRIPTORW* file = &((*file_descriptor_array)[i]); -+ -+ Stream_Read_UINT32(s, file->dwFlags); /* flags (4 bytes) */ -+ Stream_Seek(s, 32); /* reserved1 (32 bytes) */ -+ Stream_Read_UINT32(s, file->dwFileAttributes); /* fileAttributes (4 bytes) */ -+ Stream_Seek(s, 16); /* reserved2 (16 bytes) */ -+ Stream_Read_UINT64(s, lastWriteTime); /* lastWriteTime (8 bytes) */ -+ file->ftLastWriteTime = uint64_to_filetime(lastWriteTime); -+ Stream_Read_UINT32(s, file->nFileSizeHigh); /* fileSizeHigh (4 bytes) */ -+ Stream_Read_UINT32(s, file->nFileSizeLow); /* fileSizeLow (4 bytes) */ -+ for (c = 0; c < 260; c++) /* cFileName (520 bytes) */ -+ Stream_Read_UINT16(s, file->cFileName[c]); -+ } -+ -+ if (Stream_GetRemainingLength(s) > 0) -+ WLog_WARN(TAG, "packed file list has %" PRIuz " excess bytes", -+ Stream_GetRemainingLength(s)); -+out: -+ Stream_Free(s, FALSE); -+ -+ return result; -+} -+ -+#define CLIPRDR_MAX_FILE_SIZE (2U * 1024 * 1024 * 1024) -+ -+/** -+ * Serialize a packed file list. -+ * -+ * The resulting format data must be freed with the `free()` function. -+ * -+ * @param [in] file_descriptor_array array of `FILEDESCRIPTOR` structs to serialize. -+ * @param [in] file_descriptor_count number of elements in `file_descriptor_array`. -+ * @param [out] format_data serialized CLIPRDR_FILELIST. -+ * @param [out] format_data_length length of `format_data` in bytes. -+ * -+ * @returns 0 on success, otherwise a Win32 error code. -+ */ -+UINT cliprdr_serialize_file_list(const FILEDESCRIPTORW* file_descriptor_array, -+ UINT32 file_descriptor_count, BYTE** format_data, -+ UINT32* format_data_length) -+{ -+ return cliprdr_serialize_file_list_ex(CB_STREAM_FILECLIP_ENABLED, file_descriptor_array, -+ file_descriptor_count, format_data, format_data_length); -+} -+ -+UINT cliprdr_serialize_file_list_ex(UINT32 flags, const FILEDESCRIPTORW* file_descriptor_array, -+ UINT32 file_descriptor_count, BYTE** format_data, -+ UINT32* format_data_length) -+{ -+ UINT result = NO_ERROR; -+ UINT32 i; -+ wStream* s = NULL; -+ -+ if (!file_descriptor_array || !format_data || !format_data_length) -+ return ERROR_BAD_ARGUMENTS; -+ -+ if ((flags & CB_STREAM_FILECLIP_ENABLED) == 0) -+ { -+ WLog_WARN(TAG, "No file clipboard support annouonced!"); -+ return ERROR_BAD_ARGUMENTS; -+ } -+ -+ s = Stream_New(NULL, 4 + file_descriptor_count * CLIPRDR_FILEDESCRIPTOR_SIZE); -+ if (!s) -+ return ERROR_NOT_ENOUGH_MEMORY; -+ -+ Stream_Write_UINT32(s, file_descriptor_count); /* cItems (4 bytes) */ -+ -+ for (i = 0; i < file_descriptor_count; i++) -+ { -+ int c; -+ UINT64 lastWriteTime; -+ const FILEDESCRIPTORW* file = &file_descriptor_array[i]; -+ -+ /* -+ * There is a known issue with Windows server getting stuck in -+ * an infinite loop when downloading files that are larger than -+ * 2 gigabytes. Do not allow clients to send such file lists. -+ * -+ * https://support.microsoft.com/en-us/help/2258090 -+ */ -+ if ((flags & CB_HUGE_FILE_SUPPORT_ENABLED) == 0) -+ { -+ if ((file->nFileSizeHigh > 0) || (file->nFileSizeLow >= CLIPRDR_MAX_FILE_SIZE)) -+ { -+ WLog_ERR(TAG, "cliprdr does not support files over 2 GB"); -+ result = ERROR_FILE_TOO_LARGE; -+ goto error; -+ } -+ } -+ -+ Stream_Write_UINT32(s, file->dwFlags); /* flags (4 bytes) */ -+ Stream_Zero(s, 32); /* reserved1 (32 bytes) */ -+ Stream_Write_UINT32(s, file->dwFileAttributes); /* fileAttributes (4 bytes) */ -+ Stream_Zero(s, 16); /* reserved2 (16 bytes) */ -+ lastWriteTime = filetime_to_uint64(file->ftLastWriteTime); -+ Stream_Write_UINT64(s, lastWriteTime); /* lastWriteTime (8 bytes) */ -+ Stream_Write_UINT32(s, file->nFileSizeHigh); /* fileSizeHigh (4 bytes) */ -+ Stream_Write_UINT32(s, file->nFileSizeLow); /* fileSizeLow (4 bytes) */ -+ for (c = 0; c < 260; c++) /* cFileName (520 bytes) */ -+ Stream_Write_UINT16(s, file->cFileName[c]); -+ } -+ -+ Stream_SealLength(s); -+ -+ Stream_GetBuffer(s, *format_data); -+ Stream_GetLength(s, *format_data_length); -+ -+ Stream_Free(s, FALSE); -+ -+ return result; -+ -+error: -+ Stream_Free(s, TRUE); -+ -+ return result; -+} -diff --git a/include/freerdp/channels/cliprdr.h b/include/freerdp/channels/cliprdr.h -index fbf23f6e5..86fc65890 100644 ---- a/include/freerdp/channels/cliprdr.h -+++ b/include/freerdp/channels/cliprdr.h -@@ -22,7 +22,6 @@ - - #include - #include --#include - - #include - -@@ -94,6 +93,17 @@ extern "C" - { - #endif - -+ FREERDP_API UINT cliprdr_parse_file_list(const BYTE* format_data, UINT32 format_data_length, -+ FILEDESCRIPTORW** file_descriptor_array, -+ UINT32* file_descriptor_count); -+ FREERDP_API UINT cliprdr_serialize_file_list(const FILEDESCRIPTORW* file_descriptor_array, -+ UINT32 file_descriptor_count, BYTE** format_data, -+ UINT32* format_data_length); -+ FREERDP_API UINT cliprdr_serialize_file_list_ex(UINT32 flags, -+ const FILEDESCRIPTORW* file_descriptor_array, -+ UINT32 file_descriptor_count, -+ BYTE** format_data, UINT32* format_data_length); -+ - #ifdef __cplusplus - } - #endif -diff --git a/include/freerdp/utils/cliprdr_utils.h b/include/freerdp/utils/cliprdr_utils.h -deleted file mode 100644 -index 59ecf848f..000000000 ---- a/include/freerdp/utils/cliprdr_utils.h -+++ /dev/null -@@ -1,48 +0,0 @@ --/** -- * FreeRDP: A Remote Desktop Protocol Implementation -- * RDPDR utility functions -- * -- * Copyright 2022 Armin Novak -- * Copyright 2022 Thincast Technologies GmbH -- * -- * Licensed under the Apache License, Version 2.0 (the "License"); -- * you may not use this file except in compliance with the License. -- * You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --#ifndef FREERDP_UTILS_CLIPRDR_H --#define FREERDP_UTILS_CLIPRDR_H -- --#include --#include --#include -- --#ifdef __cplusplus --extern "C" --{ --#endif -- -- FREERDP_API UINT cliprdr_parse_file_list(const BYTE* format_data, UINT32 format_data_length, -- FILEDESCRIPTORW** file_descriptor_array, -- UINT32* file_descriptor_count); -- FREERDP_API UINT cliprdr_serialize_file_list(const FILEDESCRIPTORW* file_descriptor_array, -- UINT32 file_descriptor_count, BYTE** format_data, -- UINT32* format_data_length); -- FREERDP_API UINT cliprdr_serialize_file_list_ex(UINT32 flags, -- const FILEDESCRIPTORW* file_descriptor_array, -- UINT32 file_descriptor_count, -- BYTE** format_data, UINT32* format_data_length); -- --#ifdef __cplusplus --} --#endif -- --#endif -diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt -index 2ec561d33..7bff6736a 100644 ---- a/libfreerdp/utils/CMakeLists.txt -+++ b/libfreerdp/utils/CMakeLists.txt -@@ -20,7 +20,6 @@ set(MODULE_PREFIX "FREERDP_UTILS") - - set(${MODULE_PREFIX}_SRCS - passphrase.c -- cliprdr_utils.c - pcap.c - profiler.c - ringbuffer.c -diff --git a/libfreerdp/utils/cliprdr_utils.c b/libfreerdp/utils/cliprdr_utils.c -deleted file mode 100644 -index 7fb99d63a..000000000 ---- a/libfreerdp/utils/cliprdr_utils.c -+++ /dev/null -@@ -1,235 +0,0 @@ --/** -- * FreeRDP: A Remote Desktop Protocol Implementation -- * Clipboard Virtual Channel Extension -- * -- * Copyright 2013 Marc-Andre Moreau -- * Copyright 2022 Armin Novak --#include --#include -- --#include --#define TAG FREERDP_TAG("utils." CLIPRDR_SVC_CHANNEL_NAME) -- --#define CLIPRDR_FILEDESCRIPTOR_SIZE (4 + 32 + 4 + 16 + 8 + 8 + 520) --#define CLIPRDR_MAX_FILE_SIZE (2U * 1024 * 1024 * 1024) -- --static UINT64 filetime_to_uint64(FILETIME value) --{ -- UINT64 converted = 0; -- converted |= (UINT32)value.dwHighDateTime; -- converted <<= 32; -- converted |= (UINT32)value.dwLowDateTime; -- return converted; --} -- --static FILETIME uint64_to_filetime(UINT64 value) --{ -- FILETIME converted; -- converted.dwLowDateTime = (UINT32)(value >> 0); -- converted.dwHighDateTime = (UINT32)(value >> 32); -- return converted; --} -- --/** -- * Parse a packed file list. -- * -- * The resulting array must be freed with the `free()` function. -- * -- * @param [in] format_data packed `CLIPRDR_FILELIST` to parse. -- * @param [in] format_data_length length of `format_data` in bytes. -- * @param [out] file_descriptor_array parsed array of `FILEDESCRIPTOR` structs. -- * @param [out] file_descriptor_count number of elements in `file_descriptor_array`. -- * -- * @returns 0 on success, otherwise a Win32 error code. -- */ --UINT cliprdr_parse_file_list(const BYTE* format_data, UINT32 format_data_length, -- FILEDESCRIPTORW** file_descriptor_array, UINT32* file_descriptor_count) --{ -- UINT result = NO_ERROR; -- UINT32 i; -- UINT32 count = 0; -- wStream sbuffer; -- wStream* s = &sbuffer; -- -- if (!format_data || !file_descriptor_array || !file_descriptor_count) -- return ERROR_BAD_ARGUMENTS; -- -- Stream_StaticInit(&sbuffer, format_data, format_data_length); -- if (!s) -- return ERROR_NOT_ENOUGH_MEMORY; -- -- if (Stream_GetRemainingLength(s) < 4) -- { -- WLog_ERR(TAG, "invalid packed file list"); -- -- result = ERROR_INCORRECT_SIZE; -- goto out; -- } -- -- Stream_Read_UINT32(s, count); /* cItems (4 bytes) */ -- -- if (Stream_GetRemainingLength(s) / CLIPRDR_FILEDESCRIPTOR_SIZE < count) -- { -- WLog_ERR(TAG, "packed file list is too short: expected %" PRIuz ", have %" PRIuz, -- ((size_t)count) * CLIPRDR_FILEDESCRIPTOR_SIZE, Stream_GetRemainingLength(s)); -- -- result = ERROR_INCORRECT_SIZE; -- goto out; -- } -- -- *file_descriptor_count = count; -- *file_descriptor_array = calloc(count, sizeof(FILEDESCRIPTORW)); -- if (!*file_descriptor_array) -- { -- result = ERROR_NOT_ENOUGH_MEMORY; -- goto out; -- } -- -- for (i = 0; i < count; i++) -- { -- UINT64 tmp; -- FILEDESCRIPTORW* file = &((*file_descriptor_array)[i]); -- -- Stream_Read_UINT32(s, file->dwFlags); /* flags (4 bytes) */ -- Stream_Read_UINT32(s, file->clsid.Data1); -- Stream_Read_UINT16(s, file->clsid.Data2); -- Stream_Read_UINT16(s, file->clsid.Data3); -- Stream_Read(s, &file->clsid.Data4, sizeof(file->clsid.Data4)); -- Stream_Read_INT32(s, file->sizel.cx); -- Stream_Read_INT32(s, file->sizel.cy); -- Stream_Read_INT32(s, file->pointl.x); -- Stream_Read_INT32(s, file->pointl.y); -- Stream_Read_UINT32(s, file->dwFileAttributes); /* fileAttributes (4 bytes) */ -- Stream_Read_UINT64(s, tmp); /* ftCreationTime (8 bytes) */ -- file->ftCreationTime = uint64_to_filetime(tmp); -- Stream_Read_UINT64(s, tmp); /* ftLastAccessTime (8 bytes) */ -- file->ftLastAccessTime = uint64_to_filetime(tmp); -- Stream_Read_UINT64(s, tmp); /* lastWriteTime (8 bytes) */ -- file->ftLastWriteTime = uint64_to_filetime(tmp); -- Stream_Read_UINT32(s, file->nFileSizeHigh); /* fileSizeHigh (4 bytes) */ -- Stream_Read_UINT32(s, file->nFileSizeLow); /* fileSizeLow (4 bytes) */ -- Stream_Read_UTF16_String(s, file->cFileName, -- ARRAYSIZE(file->cFileName)); /* cFileName (520 bytes) */ -- } -- -- if (Stream_GetRemainingLength(s) > 0) -- WLog_WARN(TAG, "packed file list has %" PRIuz " excess bytes", -- Stream_GetRemainingLength(s)); --out: -- -- return result; --} -- --/** -- * Serialize a packed file list. -- * -- * The resulting format data must be freed with the `free()` function. -- * -- * @param [in] file_descriptor_array array of `FILEDESCRIPTOR` structs to serialize. -- * @param [in] file_descriptor_count number of elements in `file_descriptor_array`. -- * @param [out] format_data serialized CLIPRDR_FILELIST. -- * @param [out] format_data_length length of `format_data` in bytes. -- * -- * @returns 0 on success, otherwise a Win32 error code. -- */ --UINT cliprdr_serialize_file_list(const FILEDESCRIPTORW* file_descriptor_array, -- UINT32 file_descriptor_count, BYTE** format_data, -- UINT32* format_data_length) --{ -- return cliprdr_serialize_file_list_ex(CB_STREAM_FILECLIP_ENABLED, file_descriptor_array, -- file_descriptor_count, format_data, format_data_length); --} -- --UINT cliprdr_serialize_file_list_ex(UINT32 flags, const FILEDESCRIPTORW* file_descriptor_array, -- UINT32 file_descriptor_count, BYTE** format_data, -- UINT32* format_data_length) --{ -- UINT result = NO_ERROR; -- UINT32 i; -- size_t len; -- wStream* s = NULL; -- -- if (!file_descriptor_array || !format_data || !format_data_length) -- return ERROR_BAD_ARGUMENTS; -- -- if ((flags & CB_STREAM_FILECLIP_ENABLED) == 0) -- { -- WLog_WARN(TAG, "No file clipboard support annouonced!"); -- return ERROR_BAD_ARGUMENTS; -- } -- -- s = Stream_New(NULL, 4 + file_descriptor_count * CLIPRDR_FILEDESCRIPTOR_SIZE); -- if (!s) -- return ERROR_NOT_ENOUGH_MEMORY; -- -- Stream_Write_UINT32(s, file_descriptor_count); /* cItems (4 bytes) */ -- -- for (i = 0; i < file_descriptor_count; i++) -- { -- int c; -- UINT64 lastWriteTime; -- const FILEDESCRIPTORW* file = &file_descriptor_array[i]; -- -- /* -- * There is a known issue with Windows server getting stuck in -- * an infinite loop when downloading files that are larger than -- * 2 gigabytes. Do not allow clients to send such file lists. -- * -- * https://support.microsoft.com/en-us/help/2258090 -- */ -- if ((flags & CB_HUGE_FILE_SUPPORT_ENABLED) == 0) -- { -- if ((file->nFileSizeHigh > 0) || (file->nFileSizeLow >= CLIPRDR_MAX_FILE_SIZE)) -- { -- WLog_ERR(TAG, "cliprdr does not support files over 2 GB"); -- result = ERROR_FILE_TOO_LARGE; -- goto error; -- } -- } -- -- Stream_Write_UINT32(s, file->dwFlags); /* flags (4 bytes) */ -- Stream_Zero(s, 32); /* reserved1 (32 bytes) */ -- Stream_Write_UINT32(s, file->dwFileAttributes); /* fileAttributes (4 bytes) */ -- Stream_Zero(s, 16); /* reserved2 (16 bytes) */ -- lastWriteTime = filetime_to_uint64(file->ftLastWriteTime); -- Stream_Write_UINT64(s, lastWriteTime); /* lastWriteTime (8 bytes) */ -- Stream_Write_UINT32(s, file->nFileSizeHigh); /* fileSizeHigh (4 bytes) */ -- Stream_Write_UINT32(s, file->nFileSizeLow); /* fileSizeLow (4 bytes) */ -- for (c = 0; c < 260; c++) /* cFileName (520 bytes) */ -- Stream_Write_UINT16(s, file->cFileName[c]); -- } -- -- Stream_SealLength(s); -- -- Stream_GetBuffer(s, *format_data); -- Stream_GetLength(s, len); -- if (len > UINT32_MAX) -- goto error; -- -- *format_data_length = (UINT32)len; -- -- Stream_Free(s, FALSE); -- -- return result; -- --error: -- Stream_Free(s, TRUE); -- -- return result; --} --- -2.46.1 - diff --git a/SPECS/freerdp.spec b/SPECS/freerdp.spec deleted file mode 100644 index f052efd..0000000 --- a/SPECS/freerdp.spec +++ /dev/null @@ -1,427 +0,0 @@ -# Can be rebuilt with FFmpeg/OpenH264 support enabled by passing -# "--with=ffmpeg", or "--with=openh264" to mock/rpmbuild; or by globally -# setting these variables: -# https://bugzilla.redhat.com/show_bug.cgi?id=2242028 -#global _with_ffmpeg 1 -#global _with_openh264 1 - -# Can be rebuilt with OpenCL support enabled by passing # "--with=opencl" -# or by globally setting: -#global _opencl 1 - -# Momentarily disable GSS support -# https://github.com/FreeRDP/FreeRDP/issues/4348 -#global _with_gss 1 - -# Disable server support in RHEL -# https://bugzilla.redhat.com/show_bug.cgi?id=1639165 -%if 0%{?fedora} || 0%{?rhel} >= 10 -%global _with_server 1 -%endif - -# Disable support for missing codecs in RHEL -%{!?rhel:%global _with_soxr 1} -%if 0%{?fedora} || 0%{?rhel} >= 8 -%global _with_lame 1 -%endif - -Name: freerdp -Version: 2.11.7 -Release: 1%{?dist} -Epoch: 2 -Summary: Free implementation of the Remote Desktop Protocol (RDP) -License: ASL 2.0 -URL: http://www.freerdp.com/ - -Source0: https://github.com/FreeRDP/FreeRDP/archive/%{version}/FreeRDP-%{version}.tar.gz - -# Revert changes that break API -# https://issues.redhat.com/browse/RHEL-53081 -Patch0: Revert-Moved-clipboard-utils-to-core-library-fixes-6.patch - -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: alsa-lib-devel -BuildRequires: cmake >= 2.8 -BuildRequires: cups-devel -BuildRequires: gsm-devel -%{?_with_lame:BuildRequires: lame-devel} -BuildRequires: libicu-devel -BuildRequires: libjpeg-turbo-devel -BuildRequires: libX11-devel -BuildRequires: libXcursor-devel -BuildRequires: libXdamage-devel -BuildRequires: libXext-devel -BuildRequires: libXi-devel -BuildRequires: libXinerama-devel -BuildRequires: libxkbfile-devel -BuildRequires: libXrandr-devel -%{?_with_server:BuildRequires: libXtst-devel} -BuildRequires: libXv-devel -%{?_with_opencl:BuildRequires: opencl-headers >= 3.0} -%{?_with_opencl:BuildRequires: ocl-icd-devel} -%{?_with_openh264:BuildRequires: openh264-devel} -%{?_with_x264:BuildRequires: x264-devel} -%{?_with_server:BuildRequires: pam-devel} -BuildRequires: xmlto -BuildRequires: zlib-devel -BuildRequires: multilib-rpm-config - -BuildRequires: pkgconfig(cairo) -%{?_with_gss:BuildRequires: pkgconfig(krb5) >= 1.13} -BuildRequires: pkgconfig(libpcsclite) -BuildRequires: pkgconfig(libpulse) -BuildRequires: pkgconfig(libsystemd) -BuildRequires: pkgconfig(libusb-1.0) -BuildRequires: pkgconfig(openssl) -%{?_with_soxr:BuildRequires: pkgconfig(soxr)} -BuildRequires: pkgconfig(wayland-client) -BuildRequires: pkgconfig(wayland-scanner) -BuildRequires: pkgconfig(xkbcommon) - -%{?_with_ffmpeg: -BuildRequires: pkgconfig(libavcodec) >= 57.48.101 -BuildRequires: pkgconfig(libavutil) -} - -Provides: xfreerdp = %{?epoch}:%{version}-%{release} -Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} -Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} - -%description -The xfreerdp & wlfreerdp Remote Desktop Protocol (RDP) clients from the FreeRDP -project. - -xfreerdp & wlfreerdp can connect to RDP servers such as Microsoft Windows -machines, xrdp and VirtualBox. - -%package libs -Summary: Core libraries implementing the RDP protocol -Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} -Obsoletes: %{name}-plugins < 1:1.1.0 -Provides: %{name}-plugins = %{?epoch}:%{version}-%{release} -%description libs -libfreerdp-core can be embedded in applications. - -libfreerdp-channels and libfreerdp-kbd might be convenient to use in X -applications together with libfreerdp-core. - -libfreerdp-core can be extended with plugins handling RDP channels. - -%package devel -Summary: Development files for %{name} -Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} -Requires: pkgconfig -Requires: cmake >= 2.8 - -%description devel -The %{name}-devel package contains libraries and header files for developing -applications that use %{name}-libs. - -%{?_with_server: -%package server -Summary: Server support for %{name} -Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} -Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} - -%description server -The %{name}-server package contains servers which can export a desktop via -the RDP protocol. -} - -%package -n libwinpr -Summary: Windows Portable Runtime -Provides: %{name}-libwinpr = %{?epoch}:%{version}-%{release} -Obsoletes: %{name}-libwinpr < 1:1.2.0 - -%description -n libwinpr -WinPR provides API compatibility for applications targeting non-Windows -environments. When on Windows, the original native API is being used instead of -the equivalent WinPR implementation, without having to modify the code using it. - -%package -n libwinpr-devel -Summary: Windows Portable Runtime development files -Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} -Requires: pkgconfig -Requires: cmake >= 2.8 - -%description -n libwinpr-devel -The %{name}-libwinpr-devel package contains libraries and header files for -developing applications that use %{name}-libwinpr. - -%prep -%autosetup -p1 -n FreeRDP-%{version} - -# Rpmlint fixes -find . -name "*.h" -exec chmod 664 {} \; -find . -name "*.c" -exec chmod 664 {} \; - -%build -%cmake %{?_cmake_skip_rpath} \ - -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} \ - -DWITH_ALSA=ON \ - -DWITH_CAIRO=ON \ - -DWITH_CUPS=ON \ - -DWITH_CHANNELS=ON -DBUILTIN_CHANNELS=OFF \ - -DWITH_CLIENT=ON \ - -DWITH_DIRECTFB=OFF \ - -DWITH_DSP_FFMPEG=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ - -DWITH_FFMPEG=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ - -DWITH_GSM=ON \ - -DWITH_GSSAPI=%{?_with_gss:ON}%{?!_with_gss:OFF} \ - -DWITH_ICU=ON \ - -DWITH_IPP=OFF \ - -DWITH_JPEG=ON \ - -DWITH_LAME=%{?_with_lame:ON}%{?!_with_lame:OFF} \ - -DWITH_MANPAGES=ON \ - -DWITH_OPENCL=%{?_with_opencl:ON}%{?!_with_opencl:OFF} \ - -DWITH_OPENH264=%{?_with_openh264:ON}%{?!_with_openh264:OFF} \ - -DWITH_OPENSSL=ON \ - -DWITH_PCSC=ON \ - -DWITH_PULSE=ON \ - -DWITH_SERVER=%{?_with_server:ON}%{?!_with_server:OFF} \ - -DWITH_SERVER_INTERFACE=%{?_with_server:ON}%{?!_with_server:OFF} \ - -DWITH_SHADOW_X11=%{?_with_server:ON}%{?!_with_server:OFF} \ - -DWITH_SHADOW_MAC=%{?_with_server:ON}%{?!_with_server:OFF} \ - -DWITH_SOXR=%{?_with_soxr:ON}%{?!_with_soxr:OFF} \ - -DWITH_WAYLAND=ON \ - -DWITH_X11=ON \ - -DWITH_XCURSOR=ON \ - -DWITH_XEXT=ON \ - -DWITH_XKBFILE=ON \ - -DWITH_XI=ON \ - -DWITH_XINERAMA=ON \ - -DWITH_XRENDER=ON \ - -DWITH_XTEST=%{?_with_server:ON}%{?!_with_server:OFF} \ - -DWITH_XV=ON \ - -DWITH_ZLIB=ON \ -%ifarch x86_64 - -DWITH_SSE2=ON \ - -DWITH_VAAPI=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ -%else - -DWITH_SSE2=OFF \ -%endif -%ifarch armv7hl - -DARM_FP_ABI=hard \ - -DWITH_NEON=OFF \ -%endif -%ifarch armv7hnl - -DARM_FP_ABI=hard \ - -DWITH_NEON=ON \ -%endif -%ifarch armv5tel armv6l armv7l - -DARM_FP_ABI=soft \ - -DWITH_NEON=OFF \ -%endif - %{nil} - -%cmake_build - -%install -%cmake_install - -find %{buildroot} -name "*.a" -delete - -%multilib_fix_c_header --file %{_includedir}/freerdp2/freerdp/build-config.h - -%files -%{_bindir}/winpr-hash -%{_bindir}/winpr-makecert -%{_bindir}/wlfreerdp -%{_bindir}/xfreerdp -%{_mandir}/man1/winpr-hash.1* -%{_mandir}/man1/winpr-makecert.1* -%{_mandir}/man1/wlfreerdp.1* -%{_mandir}/man1/xfreerdp.1* - -%files libs -%license LICENSE -%doc README.md ChangeLog -%{_libdir}/freerdp2/ -%{_libdir}/libfreerdp-client2.so.* -%{?_with_server: -%{_libdir}/libfreerdp-server2.so.* -%{_libdir}/libfreerdp-shadow2.so.* -%{_libdir}/libfreerdp-shadow-subsystem2.so.* -} -%{_libdir}/libfreerdp2.so.* -%{_libdir}/libuwac0.so.* -%{_mandir}/man7/wlog.* - -%files devel -%{_includedir}/freerdp2 -%{_includedir}/uwac0 -%{_libdir}/cmake/FreeRDP2 -%{_libdir}/cmake/FreeRDP-Client2 -%{?_with_server: -%{_libdir}/cmake/FreeRDP-Server2 -%{_libdir}/cmake/FreeRDP-Shadow2 -} -%{_libdir}/cmake/uwac0 -%{_libdir}/libfreerdp-client2.so -%{?_with_server: -%{_libdir}/libfreerdp-server2.so -%{_libdir}/libfreerdp-shadow2.so -%{_libdir}/libfreerdp-shadow-subsystem2.so -} -%{_libdir}/libfreerdp2.so -%{_libdir}/libuwac0.so -%{_libdir}/pkgconfig/freerdp2.pc -%{_libdir}/pkgconfig/freerdp-client2.pc -%{?_with_server: -%{_libdir}/pkgconfig/freerdp-server2.pc -%{_libdir}/pkgconfig/freerdp-shadow2.pc -} -%{_libdir}/pkgconfig/uwac0.pc - -%{?_with_server: -%files server -%{_bindir}/freerdp-proxy -%{_bindir}/freerdp-shadow-cli -%{_mandir}/man1/freerdp-shadow-cli.1* -} - -%files -n libwinpr -%license LICENSE -%doc README.md ChangeLog -%{_libdir}/libwinpr2.so.* -%{_libdir}/libwinpr-tools2.so.* - -%files -n libwinpr-devel -%{_libdir}/cmake/WinPR2 -%{_includedir}/winpr2 -%{_libdir}/libwinpr2.so -%{_libdir}/libwinpr-tools2.so -%{_libdir}/pkgconfig/winpr2.pc -%{_libdir}/pkgconfig/winpr-tools2.pc - -%changelog -* Tue Oct 01 2024 Ondrej Holy - 2:2.11.7-1 -- Update to 2.11.7 (RHEL-53081) - -* Tue Dec 13 2022 Ondrej Holy - 2:2.2.0-10 -- Fix "implicit declaration of function" errors (#2136153, #2145139) - -* Thu Dec 08 2022 Ondrej Holy - - 2:2.2.0-9 -- CVE-2022-39282: Fix length checks in parallel driver (#2136151) -- CVE-2022-39283: Add missing length check in video channel (#2136153) -- CVE-2022-39316, CVE-2022-39317: Add missing length checks in zgfx (#2145139) -- CVE-2022-39318: Fix division by zero in urbdrc channel (#2145139) -- CVE-2022-39319: Add missing length checks in urbdrc channel (#2145139) -- CVE-2022-39320: Ensure urb_create_iocompletion uses size_t (#2145139) -- CVE-2022-39347: Fix path validation in drive channel (#2145139) -- CVE-2022-41877: Add missing length check in drive channel (#2145139) - -* Thu Aug 11 2022 Ondrej Holy - 2:2.2.0-8 -- Fix /monitor-list output (rhbz#2108866) - -* Wed Nov 10 2021 Ondrej Holy - 2:2.2.0-4 -- Refactored RPC gateway parser (rhbz#2017949) - -* Fri Nov 05 2021 Felipe Borges - 2:2.2.0-3 -- Add checks for bitmap and glyph width and heigth values (rhbz#2017956) - -* Wed Apr 28 2021 Ondrej Holy - 2:2.2.0-2 -- Fix exit codes for /help and similar options (rhbz#1910029) - -* Fri Nov 20 2020 Ondrej Holy - 2:2.2.0-1 -- Update to 2.2.0 (rhbz#1881971) - -* Mon May 25 2020 Ondrej Holy - 2:2.1.1-1 -- Update to 2.1.1 (rhbz#1834287). - -* Fri Apr 17 2020 Ondrej Holy - 2:2.0.0-47.rc4 -- Fix SCARD_INSUFFICIENT_BUFFER error (rhbz#1803054) -- Do not advertise /usb in help output (rhbz#1761144) - -* Wed Nov 28 2018 Ondrej Holy - 2:2.0.0-46.rc4 -- Update to 2.0.0-rc4 (#1624340) - -* Mon Oct 15 2018 Ondrej Holy - 2:2.0.0-45.rc3 -- Disable server support in RHEL (#1639165) - -* Wed Oct 10 2018 Ondrej Holy - 2:2.0.0-44.rc3 -- Fix packaging issues found by rpmdiff (#1637487) - -* Tue Sep 25 2018 Ondrej Holy - 2:2.0.0-43.rc3 -- Fix important defects found by covscan (#1602500) - -* Thu Sep 06 2018 Ondrej Holy - 2:2.0.0-42.rc3 -- Update to 2.0.0-rc3 (#1624340) - -* Mon Apr 09 2018 Simone Caronni - 2:2.0.0-41.20180405gita9ecd6a -- Update to latest snapshot. - -* Wed Mar 21 2018 Simone Caronni - 2:2.0.0-40.20180320gitde83f4d -- Add PAM support (fixes freerdp-shadow-cli). Thanks Paolo Zeppegno. -- Update to latest snapshot. - -* Thu Mar 15 2018 Simone Caronni - 2:2.0.0-39.20180314gitf8baeb7 -- Update to latest snapshot. -- Fixes connection to RDP servers with the latest Microsoft patches: - https://github.com/FreeRDP/FreeRDP/issues/4449 - -* Wed Feb 07 2018 Fedora Release Engineering - 2:2.0.0-38.20180115git8f52c7e -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Jan 18 2018 Karsten Hopp - 2.0.0-37git} -- use versioned build requirement on pkgconfig(openssl) to prevent using - compat-openssl10-devel instead of openssl-devel - -* Tue Jan 16 2018 Simone Caronni - 2:2.0.0-36.20180115git8f52c7e -- Update to latest snapshot. -- Make GSS support optional and disable it for now (#1534094 and FreeRDP #4348, - #1435, #4363). - -* Wed Dec 20 2017 Simone Caronni - 2:2.0.0-35.20171220gitbfe8359 -- Update to latest snapshot post 2.0.0rc1. - -* Mon Sep 11 2017 Simone Caronni - 2:2.0.0-34.20170831git3b83526 -- Update to latest snapshot. -- Trim changelog. - -* Mon Aug 07 2017 Björn Esser - 2:2.0.0-33.20170724gitf8c9f43 -- Rebuilt for AutoReq cmake-filesystem - -* Wed Aug 02 2017 Fedora Release Engineering - 2:2.0.0-32.20170724gitf8c9f43 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Jul 27 2017 Simone Caronni - 2:2.0.0-31.20170724gitf8c9f43 -- Update to latest snapshot, Talos security fixes. - -* Wed Jul 26 2017 Fedora Release Engineering - 2:2.0.0-30.20170710gitf580bea -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Jul 12 2017 Simone Caronni - 2:2.0.0-29.20170710gitf580bea -- Update to latest snapshot. - -* Mon Jun 26 2017 Simone Caronni - 2:2.0.0-28.20170623git9904c32 -- Update to latest snapshot. - -* Mon May 15 2017 Simone Caronni - 2:2.0.0-27.20170512gitb1df835 -- Update to latest snapshot. - -* Thu Apr 20 2017 Simone Caronni - 2:2.0.0-26.20170419gitbfcf8e7 -- Update to latest 2.0 snapshot. - -* Thu Apr 13 2017 Orion Poplawski - 2:2.0.0-25.20170317git8c68761 -- Install tools via make install - -* Wed Mar 22 2017 Simone Caronni - 2:2.0.0-24.20170317git8c68761 -- Update to latest snapshot. - -* Mon Mar 06 2017 Simone Caronni - 2:2.0.0-23.20170302git210de68 -- Remove shared libxfreerdp-client shared library. - -* Thu Mar 02 2017 Simone Caronni - 2:2.0.0-22.20170302git210de68 -- Move libxfreerdp-client shared object into devel subpackage. - -* Thu Mar 02 2017 Simone Caronni - 2:2.0.0-21.20170302git210de68 -- Update to latest snapshot. -- Update build requirements, tune build options. - -* Fri Feb 10 2017 Fedora Release Engineering - 2:2.0.0-20.20161228git90877f5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Jan 09 2017 Simone Caronni - 2:2.0.0-19.20161228git90877f5 -- Update to latest snapshot. diff --git a/freerdp.spec b/freerdp.spec new file mode 100644 index 0000000..71e5519 --- /dev/null +++ b/freerdp.spec @@ -0,0 +1,661 @@ +# Can be rebuilt with FFmpeg/OpenH264 support enabled by passing +# "--with=ffmpeg", or "--with=openh264" to mock/rpmbuild; or by globally +# setting these variables: +# https://bugzilla.redhat.com/show_bug.cgi?id=2242028 +#global _with_ffmpeg 1 +#global _with_openh264 1 + +# Can be rebuilt with OpenCL support enabled by passing # "--with=opencl" +# or by globally setting: +#global _opencl 1 + +# Disable server support in RHEL +# https://bugzilla.redhat.com/show_bug.cgi?id=1639165 +%if 0%{?fedora} || 0%{?rhel} >= 10 +%global _with_server 1 +%endif + +# Force uwac to be static to avoid conflicts with freerdp2 +# FIXME: Disable this once all freerdp2 consumers are ported to freerdp3 +%global _with_static_uwac 1 + +# Disable unwanted dependencies for RHEL +%{!?rhel:%global _with_sdl_client 1} +%{!?rhel:%global _with_soxr 1} +%{!?rhel:%global _with_uriparser 1} + +# Disable support for AAD WebView popup since it uses webkit2gtk-4.0 +#global _with_webview 1 + +# FIXME: GCC 14.x says there's lots of incompatible pointer casts going on... +%global build_type_safety_c 2 + +Name: freerdp +Version: 3.6.3 +Release: 1%{?dist} +Epoch: 2 +Summary: Free implementation of the Remote Desktop Protocol (RDP) + +# The effective license is Apache-2.0 but: +# client/SDL/dialogs/font/* is OFL-1.1 +# uwac/libuwac/* is HPND +# uwac/protocols/server-decoration.xml is LGPL-2.1-or-later +# winpr/libwinpr/ncrypt/pkcs11-headers/pkcs11.h is LicenseRef-Fedora-Public-Domain +License: Apache-2.0 AND HPND AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND OFL-1.1 +URL: http://www.freerdp.com/ + +# The license of the winpr/libwinpr/crt/unicode_builtin.c file is not allowed. +# See: https://gitlab.com/fedora/legal/fedora-license-data/-/issues/498 +# Run the ./freerdp_download_and_repack.sh script to prepare tarball. +Source0: FreeRDP-%{version}-repack.tar.gz +Source1: freerdp_download_and_repack.sh + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: alsa-lib-devel +BuildRequires: cmake >= 3.13 +BuildRequires: cups-devel +BuildRequires: gsm-devel +BuildRequires: lame-devel +BuildRequires: libicu-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: libX11-devel +BuildRequires: libXcursor-devel +BuildRequires: libXdamage-devel +BuildRequires: libXext-devel +BuildRequires: libXi-devel +BuildRequires: libXinerama-devel +BuildRequires: libxkbfile-devel +BuildRequires: libXrandr-devel +%{?_with_server:BuildRequires: libXtst-devel} +BuildRequires: libXv-devel +%{?_with_opencl:BuildRequires: opencl-headers >= 3.0} +%{?_with_opencl:BuildRequires: ocl-icd-devel} +%{?_with_openh264:BuildRequires: openh264-devel} +%{?_with_x264:BuildRequires: x264-devel} +%{?_with_server:BuildRequires: pam-devel} +BuildRequires: xmlto +BuildRequires: zlib-devel +BuildRequires: multilib-rpm-config + +BuildRequires: cmake(json-c) +# Packaging error led to cmake files in the wrong place +# Fixed in https://src.fedoraproject.org/rpms/uriparser/c/1b07302bfc80983fbf84283783370e8338d36429 +%{?_with_uriparser:BuildRequires: (cmake(uriparser) and uriparser-devel)} + +BuildRequires: pkgconfig(cairo) +BuildRequires: pkgconfig(krb5) +BuildRequires: pkgconfig(fuse3) +BuildRequires: pkgconfig(libpcsclite) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libsystemd) +BuildRequires: pkgconfig(libusb-1.0) +BuildRequires: pkgconfig(libwebp) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(opus) +%{?_with_sdl_client:BuildRequires: pkgconfig(sdl2)} +%{?_with_sdl_client:BuildRequires: pkgconfig(SDL2_ttf)} +%{?_with_soxr:BuildRequires: pkgconfig(soxr)} +BuildRequires: pkgconfig(wayland-client) +BuildRequires: pkgconfig(wayland-scanner) +%{?_with_webview:BuildRequires: pkgconfig(webkit2gtk-4.0)} +BuildRequires: pkgconfig(xkbcommon) + +%{?_with_ffmpeg: +BuildRequires: pkgconfig(libavcodec) >= 57.48.101 +BuildRequires: pkgconfig(libavutil) +BuildRequires: pkgconfig(libswscale) +} + +Provides: xfreerdp = %{?epoch}:%{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} +Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} + +%description +The xfreerdp & wlfreerdp Remote Desktop Protocol (RDP) clients from the FreeRDP +project. + +xfreerdp & wlfreerdp can connect to RDP servers such as Microsoft Windows +machines, xrdp and VirtualBox. + +%package libs +Summary: Core libraries implementing the RDP protocol +Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} +Obsoletes: %{name}-plugins < 1:1.1.0 +Provides: %{name}-plugins = %{?epoch}:%{version}-%{release} +%description libs +libfreerdp-core can be embedded in applications. + +libfreerdp-channels and libfreerdp-kbd might be convenient to use in X +applications together with libfreerdp-core. + +libfreerdp-core can be extended with plugins handling RDP channels. + +%package devel +Summary: Development files for %{name} +Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} +Requires: pkgconfig +Requires: cmake >= 3.13 + +%description devel +The %{name}-devel package contains libraries and header files for developing +applications that use %{name}-libs. + +%{?_with_server: +%package server +Summary: Server support for %{name} +Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{?epoch}:%{version}-%{release} + +%description server +The %{name}-server package contains servers which can export a desktop via +the RDP protocol. +} + +%package -n libwinpr +Summary: Windows Portable Runtime +Provides: %{name}-libwinpr = %{?epoch}:%{version}-%{release} +Obsoletes: %{name}-libwinpr < 1:1.2.0 + +%description -n libwinpr +WinPR provides API compatibility for applications targeting non-Windows +environments. When on Windows, the original native API is being used instead of +the equivalent WinPR implementation, without having to modify the code using it. + +%package -n libwinpr-devel +Summary: Windows Portable Runtime development files +Requires: libwinpr%{?_isa} = %{?epoch}:%{version}-%{release} +Requires: pkgconfig +Requires: cmake >= 3.13 + +%description -n libwinpr-devel +The %{name}-libwinpr-devel package contains libraries and header files for +developing applications that use %{name}-libwinpr. + +%prep +%autosetup -p1 -n FreeRDP-%{version} + +# Rpmlint fixes +find . -name "*.h" -exec chmod 664 {} \; +find . -name "*.c" -exec chmod 664 {} \; + +%build +%cmake %{?_cmake_skip_rpath} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} \ + -DWITH_ALSA=ON \ + -DWITH_AAD=ON \ + -DWITH_CAIRO=ON \ + -DWITH_CUPS=ON \ + -DWITH_CHANNELS=ON -DBUILTIN_CHANNELS=OFF \ + -DWITH_CLIENT=ON \ + -DWITH_CLIENT_SDL=%{?_with_sdl_client:ON}%{?!_with_sdl_client:OFF} \ + -DWITH_DIRECTFB=OFF \ + -DWITH_DSP_FFMPEG=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ + -DWITH_FFMPEG=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ + -DWITH_FUSE=ON \ + -DWITH_GSM=ON \ + -DWITH_ICU=ON \ + -DWITH_IPP=OFF \ + -DWITH_JPEG=ON \ + -DWITH_JSONC_REQUIRED=ON \ + -DWITH_KRB5=ON \ + -DWITH_LAME=ON \ + -DWITH_MANPAGES=ON \ + -DWITH_OPENCL=%{?_with_opencl:ON}%{?!_with_opencl:OFF} \ + -DWITH_OPENH264=%{?_with_openh264:ON}%{?!_with_openh264:OFF} \ + -DWITH_OPENSSL=ON \ + -DWITH_OPUS=ON \ + -DWITH_PCSC=ON \ + -DWITH_PKCS11=ON \ + -DWITH_PULSE=ON \ + -DWITH_SAMPLE=OFF \ + -DWITH_SERVER=%{?_with_server:ON}%{?!_with_server:OFF} \ + -DWITH_SERVER_INTERFACE=%{?_with_server:ON}%{?!_with_server:OFF} \ + -DWITH_SHADOW_X11=%{?_with_server:ON}%{?!_with_server:OFF} \ + -DWITH_SHADOW_MAC=%{?_with_server:ON}%{?!_with_server:OFF} \ + -DWITH_SOXR=%{?_with_soxr:ON}%{?!_with_soxr:OFF} \ + -DWITH_SWSCALE=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ + -DWITH_URIPARSER=%{?_with_uriparser:ON}%{?!_with_uriparser:OFF} \ + -DWITH_VIDEO_FFMPEG=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ + -DWITH_WAYLAND=ON \ + -DWITH_WEBVIEW=%{?_with_webview:ON}%{?!_with_webview:OFF} \ + -DWITH_X11=ON \ + -DWITH_XCURSOR=ON \ + -DWITH_XEXT=ON \ + -DWITH_XKBFILE=ON \ + -DWITH_XI=ON \ + -DWITH_XINERAMA=ON \ + -DWITH_XRENDER=ON \ + -DWITH_XTEST=%{?_with_server:ON}%{?!_with_server:OFF} \ + -DWITH_XV=ON \ + -DWITH_ZLIB=ON \ +%ifarch x86_64 + -DWITH_SSE2=ON \ + -DWITH_VAAPI=%{?_with_ffmpeg:ON}%{?!_with_ffmpeg:OFF} \ +%else + -DWITH_SSE2=OFF \ +%endif +%ifarch armv7hl + -DARM_FP_ABI=hard \ + -DWITH_NEON=OFF \ +%endif +%ifarch armv7hnl + -DARM_FP_ABI=hard \ + -DWITH_NEON=ON \ +%endif +%ifarch armv5tel armv6l armv7l + -DARM_FP_ABI=soft \ + -DWITH_NEON=OFF \ +%endif + -DUWAC_FORCE_STATIC_BUILD=%{?_with_static_uwac:ON}%{?!_with_static_uwac:OFF} \ + -DWINPR_UTILS_IMAGE_PNG=ON \ + -DWINPR_UTILS_IMAGE_WEBP=ON \ + -DWINPR_UTILS_IMAGE_JPEG=ON \ + %{nil} + +%cmake_build + +%install +%cmake_install + +find %{buildroot} -name "*.a" -delete + +%multilib_fix_c_header --file %{_includedir}/freerdp3/freerdp/build-config.h + +%files +%{?_with_sdl_client: +%{_bindir}/sdl-freerdp +} +%{_bindir}/winpr-hash +%{_bindir}/winpr-makecert +%{_bindir}/wlfreerdp +%{_bindir}/xfreerdp +%{?_with_sdl_client: +%{_mandir}/man1/sdl-freerdp.1* +} +%{_mandir}/man1/winpr-hash.1* +%{_mandir}/man1/winpr-makecert.1* +%{_mandir}/man1/wlfreerdp.1* +%{_mandir}/man1/xfreerdp.1* + +%files libs +%license LICENSE +%doc README.md ChangeLog +%{_libdir}/freerdp3/ +%{_libdir}/libfreerdp-client3.so.* +%{?_with_server: +%{_libdir}/libfreerdp-server3.so.* +%{_libdir}/libfreerdp-server-proxy3.so.* +%{_libdir}/libfreerdp-shadow3.so.* +%{_libdir}/libfreerdp-shadow-subsystem3.so.* +} +%{_libdir}/libfreerdp3.so.* +%{?!_with_static_uwac: +%{_libdir}/libuwac0.so.* +} +%{_libdir}/librdtk0.so.* +%{_mandir}/man7/wlog.* + +%files devel +%{_includedir}/freerdp3/ +%{?!_with_static_uwac: +%{_includedir}/uwac0/ +} +%{_includedir}/rdtk0/ +%{_libdir}/cmake/FreeRDP3/ +%{_libdir}/cmake/FreeRDP-Client3/ +%{?_with_server: +%{_libdir}/cmake/FreeRDP-Proxy3/ +%{_libdir}/cmake/FreeRDP-Server3/ +%{_libdir}/cmake/FreeRDP-Shadow3/ +} +%{?!_with_static_uwac: +%{_libdir}/cmake/uwac0/ +} +%{_libdir}/cmake/rdtk0/ +%{_libdir}/libfreerdp-client3.so +%{?_with_server: +%{_libdir}/libfreerdp-server3.so +%{_libdir}/libfreerdp-server-proxy3.so +%{_libdir}/libfreerdp-shadow3.so +%{_libdir}/libfreerdp-shadow-subsystem3.so +} +%{_libdir}/libfreerdp3.so +%{?!_with_static_uwac: +%{_libdir}/libuwac0.so +} +%{_libdir}/librdtk0.so +%{_libdir}/pkgconfig/freerdp3.pc +%{_libdir}/pkgconfig/freerdp-client3.pc +%{?_with_server: +%{_libdir}/pkgconfig/freerdp-server3.pc +%{_libdir}/pkgconfig/freerdp-server-proxy3.pc +%{_libdir}/pkgconfig/freerdp-shadow3.pc +} +%{?!_with_static_uwac: +%{_libdir}/pkgconfig/uwac0.pc +} +%{_libdir}/pkgconfig/rdtk0.pc + +%{?_with_server: +%files server +%{_bindir}/freerdp-proxy +%{_bindir}/freerdp-shadow-cli +%{_mandir}/man1/freerdp-proxy.1* +%{_mandir}/man1/freerdp-shadow-cli.1* +} + +%files -n libwinpr +%license LICENSE +%doc README.md ChangeLog +%{_libdir}/libwinpr3.so.* +%{_libdir}/libwinpr-tools3.so.* + +%files -n libwinpr-devel +%{_libdir}/cmake/WinPR3/ +%{_libdir}/cmake/WinPR-tools3/ +%{_includedir}/winpr3/ +%{_libdir}/libwinpr3.so +%{_libdir}/libwinpr-tools3.so +%{_libdir}/pkgconfig/winpr3.pc +%{_libdir}/pkgconfig/winpr-tools3.pc + +%changelog +* Fri Jul 26 2024 Ondrej Holy - 2:3.6.3-1 +- Update to 3.6.3 (#2299253) + +* Tue Jul 23 2024 Neal Gompa - 2:3.6.2-2 +- Include freerdp source download script in SRPM + +* Mon Jul 08 2024 Ondrej Holy - 2:3.6.2-1 +- Update to 3.6.2 + +* Mon Jul 08 2024 Ondrej Holy - 2:3.5.1-3 +- Remove file with non-allowed license from the tarball + +* Mon Jun 24 2024 Troy Dawson - 2:3.5.1-2 +- Bump release for June 2024 mass rebuild + +* Tue May 07 2024 Ondrej Holy - 2:3.5.1-1 +- Update to 3.5.1 (CVE-2024-32039, CVE-2024-32040, CVE-2024-32041, + CVE-2024-32458, CVE-2024-32459, CVE-2024-32460, CVE-2024-32658, + CVE-2024-32659, CVE-2024-32660, CVE-2024-32661, CVE-2024-32662) + +* Mon Mar 25 2024 Ondrej Holy - 2:3.4.0-2 +- Disable unwanted dependencies for RHEL + +* Fri Mar 22 2024 Ondrej Holy - 2:3.4.0-1 +- Update to 3.4.0 + +* Thu Feb 22 2024 Neal Gompa - 2:3.3.0-1 +- Update to 3.3.0 + +* Thu Feb 01 2024 Ondrej Holy - 2:3.2.0-4 +- Enable KRB5 support + +* Wed Jan 31 2024 Pete Walter - 2:3.2.0-3 +- Rebuild for ICU 74 + +* Sat Jan 27 2024 Neal Gompa - 2:3.2.0-2 +- Force static libuwac to deconflict with freerdp2 + +* Wed Jan 24 2024 Neal Gompa - 2:3.2.0-1 +- Rebase to 3.2.0 + +* Wed Jan 24 2024 Fedora Release Engineering - 2:2.11.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 2:2.11.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 12 2024 Ondrej Holy - 2:2.11.4-1 +- Update to 2.11.4. + +* Wed Oct 25 2023 Ondrej Holy - 2:2.11.2-3 +- Disable FFmpeg support (#2242028). + +* Mon Oct 09 2023 John Wiele - 2:2.11.2-2 +- Enable optional build with OpenCL support. + +* Wed Sep 27 2023 Ondrej Holy - 2:2.11.1-2 +- Update to 2.11.2. + +* Tue Sep 05 2023 Ondrej Holy - 2:2.11.1-1 +- Update to 2.11.1. + +* Fri Sep 01 2023 Ondrej Holy - 2:2.11.0-1 +- Update to 2.11.0 (CVE-2023-39350, CVE-2023-39351, CVE-2023-39352, + CVE-2023-39353, CVE-2023-39354, CVE-2023-39356, CVE-2023-40181, + CVE-2023-40186, CVE-2023-40188, CVE-2023-40567, CVE-2023-40569 and + CVE-2023-40589). + +* Wed Jul 19 2023 Fedora Release Engineering - 2:2.10.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 11 2023 František Zatloukal - 2:2.10.0-3 +- Rebuilt for ICU 73.2 + +* Thu May 11 2023 Ondrej Holy - 2:2.10.0-2 +- Enable recommended FFmpeg support. + +* Tue Feb 21 2023 Ondrej Holy - 2:2.10.0-1 +- Update to 2.10.0. + +* Thu Jan 19 2023 Fedora Release Engineering - 2:2.9.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Dec 31 2022 Pete Walter - 2:2.9.0-2 +- Rebuild for ICU 72 + +* Wed Nov 30 2022 Ondrej Holy - 2:2.9.0-1 +- Update to 2.9.0 (CVE-2022-39316, CVE-2022-39317, CVE-2022-39318, +CVE-2022-39319, CVE-2022-39320, CVE-2022-41877, CVE-2022-39347). + +* Mon Nov 14 2022 Ondrej Holy - 2:2.8.1-1 +- Update to 2.8.1 (CVE-2022-39282, CVE-2022-39283). + +* Mon Aug 15 2022 Simone Caronni - 2:2.8.0-1 +- Update to 2.8.0. + +* Wed Aug 03 2022 Ondrej Holy - 2:2.7.0-4 +- Enable server support in ELN. + +* Mon Aug 01 2022 Frantisek Zatloukal - 2:2.7.0-3 +- Rebuilt for ICU 71.1 + +* Thu Jul 21 2022 Fedora Release Engineering - 2:2.7.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Apr 25 2022 Ondrej Holy - 2:2.7.0-1 +- Update to 2.7.0. + +* Fri Mar 11 2022 Ondrej Holy - 2:2.6.1-1 +- Update to 2.6.1. + +* Thu Feb 03 2022 Ondrej Holy - 2:2.5.0-1 +- Update to 2.5.0. + +* Thu Jan 20 2022 Fedora Release Engineering - 2:2.4.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Nov 26 2021 Ondrej Holy - 2:2.4.1-2 +- Fix datatype mismatch / big-endian breakage +- Load legacy provider when initializing OpenSSL 3.0 + +* Wed Nov 10 2021 Ondrej Holy - 2:2.4.1-1 +- Update to 2.4.1 (CVE-2021-41159, CVE-2021-41160). + +* Tue Sep 14 2021 Sahana Prasad - 2:2.4.0-3 +- Rebuilt with OpenSSL 3.0.0 + +* Wed Aug 11 2021 Ondrej Holy - 2:2.4.0-2 +- Preparation for OpenSSL 3.0 + +* Thu Jul 29 2021 Ondrej Holy - 2:2.4.0-1 +- Update to 2.4.0. + +* Wed Jul 21 2021 Fedora Release Engineering - 2:2.3.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed May 19 2021 Pete Walter - 2:2.3.2-2 +- Rebuild for ICU 69 + +* Thu Apr 15 2021 Simone Caronni - 2:2.3.2-1 +- Update to 2.3.2. + +* Tue Mar 23 2021 Simone Caronni - 2:2.2.0-6 +- Explicitly enable Cairo support (#1938393). + +* Tue Jan 26 2021 Fedora Release Engineering - 2:2.2.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Aug 11 2020 Ondrej Holy - 2:2.2.0-4 +- Use %%cmake_ macros to fix out-of-source builds (#1863586) + +* Sat Aug 01 2020 Fedora Release Engineering - 2:2.2.0-3 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 27 2020 Fedora Release Engineering - 2:2.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 23 2020 Simone Caronni - 2:2.2.0-1 +- Update to 2.2.0. + +* Tue Jun 30 2020 Simone Caronni - 2:2.1.2-1 +- Update to 2.1.2. + +* Thu May 21 2020 Ondrej Holy - 2:2.1.1-1 +- Update to 2.1.1. + +* Fri May 15 2020 Ondrej Holy - 2:2.1.0-1 +- Update to 2.1.0 (#1833540). + +* Fri May 15 2020 Pete Walter - 2:2.0.0-57.20200207git245fc60 +- Rebuild for ICU 67 + +* Fri Feb 07 2020 Simone Caronni - 2:2.0.0-56.20200207git245fc60 +- Update to latest snapshot. + +* Tue Jan 28 2020 Fedora Release Engineering - 2:2.0.0-55.20190820git6015229 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 01 2019 Pete Walter - 2:2.0.0-54.20190820git6015229 +- Rebuild for ICU 65 + +* Tue Aug 20 2019 Simone Caronni - 2:2.0.0-53.20190820git6015229 +- Update to latest snapshot. + +* Thu Jul 25 2019 Fedora Release Engineering - 2:2.0.0-52.20190918git5e672d4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Jul 21 2019 Simone Caronni - 2:2.0.0-51.20190918git5e672d4 +- Update to latest snapshot. + +* Sat May 18 2019 Simone Caronni - 2:2.0.0-50.20190517gitb907324 +- Update to latest snapshot. + +* Wed Mar 06 2019 Simone Caronni - 2:2.0.0-49.20190304git435872b +- Fix for GFX color depth (Windows 10). + +* Thu Feb 28 2019 Simone Caronni - 2:2.0.0-48.20190228gitce386c8 +- Update to latest snapshot post rc4. +- CVE-2018-1000852 (#1661642). + +* Thu Jan 31 2019 Fedora Release Engineering - 2:2.0.0-47.rc4.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Nov 29 2018 Ondrej Holy - 2:2.0.0-47.rc4 +- Update to 2.0.0-rc4 + +* Mon Oct 15 2018 Simone Caronni - 2:2.0.0-46.20181008git00af869 +- Enable Xtest option (#1559606). + +* Mon Oct 15 2018 Simone Caronni - 2:2.0.0-45.20181008git00af869 +- Update to last snapshot post 2.0.0-rc3. + +* Mon Aug 20 2018 Simone Caronni - 2:2.0.0-44.rc3 +- Update SPEC file. + +* Sat Aug 04 2018 Mike DePaulo - 2:2.0.0-43.20180801.rc3 +- Update to 2.0.0-rc3 + +* Fri Jul 13 2018 Fedora Release Engineering - 2:2.0.0-42.20180405gita9ecd6a +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Mon Apr 09 2018 Simone Caronni - 2:2.0.0-41.20180405gita9ecd6a +- Update to latest snapshot. + +* Wed Mar 21 2018 Simone Caronni - 2:2.0.0-40.20180320gitde83f4d +- Add PAM support (fixes freerdp-shadow-cli). Thanks Paolo Zeppegno. +- Update to latest snapshot. + +* Thu Mar 15 2018 Simone Caronni - 2:2.0.0-39.20180314gitf8baeb7 +- Update to latest snapshot. +- Fixes connection to RDP servers with the latest Microsoft patches: + https://github.com/FreeRDP/FreeRDP/issues/4449 + +* Wed Feb 07 2018 Fedora Release Engineering - 2:2.0.0-38.20180115git8f52c7e +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Jan 18 2018 Karsten Hopp - 2.0.0-37git} +- use versioned build requirement on pkgconfig(openssl) to prevent using + compat-openssl10-devel instead of openssl-devel + +* Tue Jan 16 2018 Simone Caronni - 2:2.0.0-36.20180115git8f52c7e +- Update to latest snapshot. +- Make GSS support optional and disable it for now (#1534094 and FreeRDP #4348, + #1435, #4363). + +* Wed Dec 20 2017 Simone Caronni - 2:2.0.0-35.20171220gitbfe8359 +- Update to latest snapshot post 2.0.0rc1. + +* Mon Sep 11 2017 Simone Caronni - 2:2.0.0-34.20170831git3b83526 +- Update to latest snapshot. +- Trim changelog. + +* Mon Aug 07 2017 Björn Esser - 2:2.0.0-33.20170724gitf8c9f43 +- Rebuilt for AutoReq cmake-filesystem + +* Wed Aug 02 2017 Fedora Release Engineering - 2:2.0.0-32.20170724gitf8c9f43 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Simone Caronni - 2:2.0.0-31.20170724gitf8c9f43 +- Update to latest snapshot, Talos security fixes. + +* Wed Jul 26 2017 Fedora Release Engineering - 2:2.0.0-30.20170710gitf580bea +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jul 12 2017 Simone Caronni - 2:2.0.0-29.20170710gitf580bea +- Update to latest snapshot. + +* Mon Jun 26 2017 Simone Caronni - 2:2.0.0-28.20170623git9904c32 +- Update to latest snapshot. + +* Mon May 15 2017 Simone Caronni - 2:2.0.0-27.20170512gitb1df835 +- Update to latest snapshot. + +* Thu Apr 20 2017 Simone Caronni - 2:2.0.0-26.20170419gitbfcf8e7 +- Update to latest 2.0 snapshot. + +* Thu Apr 13 2017 Orion Poplawski - 2:2.0.0-25.20170317git8c68761 +- Install tools via make install + +* Wed Mar 22 2017 Simone Caronni - 2:2.0.0-24.20170317git8c68761 +- Update to latest snapshot. + +* Mon Mar 06 2017 Simone Caronni - 2:2.0.0-23.20170302git210de68 +- Remove shared libxfreerdp-client shared library. + +* Thu Mar 02 2017 Simone Caronni - 2:2.0.0-22.20170302git210de68 +- Move libxfreerdp-client shared object into devel subpackage. + +* Thu Mar 02 2017 Simone Caronni - 2:2.0.0-21.20170302git210de68 +- Update to latest snapshot. +- Update build requirements, tune build options. + +* Fri Feb 10 2017 Fedora Release Engineering - 2:2.0.0-20.20161228git90877f5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Jan 09 2017 Simone Caronni - 2:2.0.0-19.20161228git90877f5 +- Update to latest snapshot. diff --git a/freerdp_download_and_repack.sh b/freerdp_download_and_repack.sh new file mode 100755 index 0000000..8b1f26e --- /dev/null +++ b/freerdp_download_and_repack.sh @@ -0,0 +1,14 @@ +#!/bin/sh +version=$(cat freerdp.spec | grep "Version: " | tr --squeeze-repeats " " | cut --delimiter " " --fields 2) + +echo "Downloading FreeRDP-$version.tar.gz" +curl --silent --location "https://github.com/FreeRDP/FreeRDP/archive/$version/FreeRDP-$version.tar.gz" --output "FreeRDP-$version.tar.gz" || exit 1 + +echo "Removing unicode_builtin.c" +gzip --decompress "FreeRDP-$version.tar.gz" || exit 1 +tar --file "FreeRDP-$version.tar" --delete "*/winpr/libwinpr/crt/unicode_builtin.c" || exit 1 +gzip --best "FreeRDP-$version.tar" --stdout > FreeRDP-$version-repack.tar.gz +rm FreeRDP-$version.tar + +echo "FreeRDP-$version-repack.tar.gz is prepared" +exit 0 diff --git a/sources b/sources new file mode 100644 index 0000000..0f210ef --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (FreeRDP-3.6.3-repack.tar.gz) = 45bf2c1eb8d30460a2beb20a2c784ac32767064568e09d5fa8b3d2121f22d4c566c362c3f91f522bb793882bb1cfa9c8fc02a22e695e182a69206267d789fd5c