diff --git a/0001-Change-type-in-XrdSutCacheArg_t-to-long-long.patch b/0001-Change-type-in-XrdSutCacheArg_t-to-long-long.patch new file mode 100644 index 0000000..5a56632 --- /dev/null +++ b/0001-Change-type-in-XrdSutCacheArg_t-to-long-long.patch @@ -0,0 +1,40 @@ +From ca9c703a58c9f3332cfca592481c5f1e694cf536 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Mon, 9 Sep 2024 06:58:29 +0200 +Subject: [PATCH] Change type in XrdSutCacheArg_t to long long + +The XrdSutCacheArg_t type is used to pass arguments of different +types. The type used must be wide enough to fit the widest of the +types passed. One of the types passed is time_t, which can be 64 bits +wide also on 32-bit systems. So a long, which is 32 bits wide on a +32-bit system is not sufficient. + +This commit changes the type to long long. + +Fixes: #2272 +--- + src/XrdSut/XrdSutCache.hh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/XrdSut/XrdSutCache.hh b/src/XrdSut/XrdSutCache.hh +index b9635d4e1..6c39f87e8 100644 +--- a/src/XrdSut/XrdSutCache.hh ++++ b/src/XrdSut/XrdSutCache.hh +@@ -40,10 +40,10 @@ + + typedef bool (*XrdSutCacheGet_t)(XrdSutCacheEntry *, void *); + typedef struct { +- long arg1; +- long arg2; +- long arg3; +- long arg4; ++ long long arg1; ++ long long arg2; ++ long long arg3; ++ long long arg4; + } XrdSutCacheArg_t; + + class XrdSutCache { +-- +2.46.0 + diff --git a/0001-Increase-client-timeouts-for-XRootD-server-tests.patch b/0001-Increase-client-timeouts-for-XRootD-server-tests.patch new file mode 100644 index 0000000..0477d69 --- /dev/null +++ b/0001-Increase-client-timeouts-for-XRootD-server-tests.patch @@ -0,0 +1,54 @@ +From ce836985eed0f6e496113b9e5c65c8d4a53a112d Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 17 Sep 2024 05:08:21 +0200 +Subject: [PATCH] Increase client timeouts for XRootD server tests + +The XRootD server tests currently uses very short settings for the +client timeouts: + + - XRD_REQUESTTIMEOUT: 2 + - XRD_STREAMTIMEOUT: 2 + - XRD_TIMEOUTRESOLUTION: 1 + +This is a major reduction from the default values: + + - XRD_REQUESTTIMEOUT: 1800 + - XRD_STREAMTIMEOUT: 60 + - XRD_TIMEOUTRESOLUTION: 15 + +According to the comment in the test script, this is done in order to +"catch errors quickly and prevent the test suite from getting stuck +waiting for timeouts while running". + +However, the very short timeouts make some tests fail with timeout +errors when run on small or slow systems. + +This commit increases the timeout values to avoid errors: + + - XRD_REQUESTTIMEOUT: 180 + - XRD_STREAMTIMEOUT: 30 + - XRD_TIMEOUTRESOLUTION: 10 +--- + tests/XRootD/test.sh | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/tests/XRootD/test.sh b/tests/XRootD/test.sh +index 60a402920..fe001a029 100755 +--- a/tests/XRootD/test.sh ++++ b/tests/XRootD/test.sh +@@ -47,9 +47,9 @@ export XRD_LOGLEVEL XRD_LOGFILE + # Reduce default timeouts to catch errors quickly and prevent the test + # suite from getting stuck waiting for timeouts while running. + +-: "${XRD_REQUESTTIMEOUT:=2}" +-: "${XRD_STREAMTIMEOUT:=2}" +-: "${XRD_TIMEOUTRESOLUTION:=1}" ++: "${XRD_REQUESTTIMEOUT:=180}" ++: "${XRD_STREAMTIMEOUT:=30}" ++: "${XRD_TIMEOUTRESOLUTION:=10}" + + export XRD_REQUESTTIMEOUT XRD_STREAMTIMEOUT XRD_TIMEOUTRESOLUTION + +-- +2.46.0 + diff --git a/0001-Make-documentation-self-contained.patch b/0001-Make-documentation-self-contained.patch deleted file mode 100644 index bba4217..0000000 --- a/0001-Make-documentation-self-contained.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8b924dbc92d3cce474421fbd7974f3d22d64d51c Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Wed, 12 Aug 2026 17:00:45 +0200 -Subject: [PATCH] Make documentation self-contained - ---- - README.md | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/README.md b/README.md -index bafd1112d..167d476e0 100644 ---- a/README.md -+++ b/README.md -@@ -1,12 +1,5 @@ --[![Repology](https://img.shields.io/badge/repology-xrootd-blue)](https://repology.org/project/xrootd/packages) --[![CDash](https://img.shields.io/badge/CDash-XRootD-limegreen)](https://my.cdash.org/index.php?project=XRootD) --[![ABI](https://github.com/xrootd/xrootd/actions/workflows/ABI.yml/badge.svg)](https://github.com/xrootd/xrootd/actions/workflows/ABI.yml) --[![CI](https://github.com/xrootd/xrootd/actions/workflows/CI.yml/badge.svg)](https://github.com/xrootd/xrootd/actions/workflows/CI.yml) --[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11900/badge)](https://www.bestpractices.dev/projects/11900) --[![LFX Health Score](https://insights.linuxfoundation.org/api/badge/health-score?project=xrootd)](https://insights.linuxfoundation.org/project/xrootd) -- -

-- -+ -

- - ## XRootD: eXtended ROOT Daemon --- -2.55.0 - diff --git a/0001-Protect-against-array-index-out-of-bounds.patch b/0001-Protect-against-array-index-out-of-bounds.patch new file mode 100644 index 0000000..cacee0a --- /dev/null +++ b/0001-Protect-against-array-index-out-of-bounds.patch @@ -0,0 +1,59 @@ +From 7836a0f2d778b082c632a92846ecf756e78fbb24 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Sat, 7 Sep 2024 18:04:26 +0200 +Subject: [PATCH 1/2] Protect against array index out of bounds +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Seen on hppa Linux where EBADE is 160. + +In function ‘int {anonymous}::initErrTable()’, + inlined from ‘void __static_initialization_and_destruction_0()’ at /<>/src/XrdSys/XrdSysE2T.cc:92:28, + inlined from ‘(static initializers for /<>/src/XrdSys/XrdSysE2T.cc)’ at /<>/src/XrdSys/XrdSysE2T.cc:128:1: +/<>/src/XrdSys/XrdSysE2T.cc:70:26: warning: array subscript 160 is above array bounds of ‘const char* [144]’ [-Warray-bounds=] + 70 | if (Errno2String[EBADE]) { + | ~~~~~~~~~~~~~~~~~~^ +/<>/src/XrdSys/XrdSysE2T.cc: In function ‘(static initializers for /<>/src/XrdSys/XrdSysE2T.cc)’: +/<>/src/XrdSys/XrdSysE2T.cc:48:28: note: while referencing ‘{anonymous}::Errno2String’ + 48 | const char* Errno2String[errSlots] = {0}; + | ^~~~~~~~~~~~ +In function ‘int {anonymous}::initErrTable()’, + inlined from ‘void __static_initialization_and_destruction_0()’ at /<>/src/XrdSys/XrdSysE2T.cc:92:28, + inlined from ‘(static initializers for /<>/src/XrdSys/XrdSysE2T.cc)’ at /<>/src/XrdSys/XrdSysE2T.cc:128:1: +/<>/src/XrdSys/XrdSysE2T.cc:74:22: warning: array subscript 160 is above array bounds of ‘const char* [144]’ [-Warray-bounds=] + 74 | Errno2String[EBADE] = "authentication failed - possible invalid exchange"; + | ~~~~~~~~~~~~~~~~~~^ +/<>/src/XrdSys/XrdSysE2T.cc: In function ‘(static initializers for /<>/src/XrdSys/XrdSysE2T.cc)’: +/<>/src/XrdSys/XrdSysE2T.cc:48:28: note: while referencing ‘{anonymous}::Errno2String’ + 48 | const char* Errno2String[errSlots] = {0}; + | ^~~~~~~~~~~~ +--- + src/XrdSys/XrdSysE2T.cc | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/src/XrdSys/XrdSysE2T.cc b/src/XrdSys/XrdSysE2T.cc +index 83b62e317..9f615a911 100644 +--- a/src/XrdSys/XrdSysE2T.cc ++++ b/src/XrdSys/XrdSysE2T.cc +@@ -67,11 +67,13 @@ int initErrTable() + // EAUTH is remapped to EBADE ('invalid exchange'). Given there's no current XRootD use of a + // syscall that can return EBADE, we assume EBADE really means authentication denied. + #if defined(EBADE) +- if (Errno2String[EBADE]) { +- free((char*)Errno2String[EBADE]); ++ if (EBADE - ERRNOBASE > 0 && EBADE - ERRNOBASE < errSlots) { ++ if (Errno2String[EBADE - ERRNOBASE]) ++ free((char*)Errno2String[EBADE - ERRNOBASE]); ++ Errno2String[EBADE - ERRNOBASE] = "authentication failed - possible invalid exchange"; ++ if (EBADE - ERRNOBASE > lastGood) ++ lastGood = EBADE - ERRNOBASE; + } +- +- Errno2String[EBADE] = "authentication failed - possible invalid exchange"; + #endif + + // Supply generic message for missing ones +-- +2.46.0 + diff --git a/0001-Reproducible-doxygen-output.patch b/0001-Reproducible-doxygen-output.patch new file mode 100644 index 0000000..477a01b --- /dev/null +++ b/0001-Reproducible-doxygen-output.patch @@ -0,0 +1,34 @@ +From 6372f261574a13f7a14bd8b55c45d2bedfd5e4c8 Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 13 Sep 2024 16:24:54 +0200 +Subject: [PATCH] Reproducible doxygen output. + +The files generated by doxygen whose file names contain the string +unnamedN where N is a number are not generated using predictable +names. + +This happens when running doxygen using multiple threads. + +Set NUM_PROC_THREADS=1 to work around this issue. + +See: https://github.com/doxygen/doxygen/issues/11138 +--- + Doxyfile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Doxyfile b/Doxyfile +index a85babb7c..f3bc4c524 100644 +--- a/Doxyfile ++++ b/Doxyfile +@@ -492,7 +492,7 @@ LOOKUP_CACHE_SIZE = 2 + # DOT_NUM_THREADS setting. + # Minimum value: 0, maximum value: 32, default value: 1. + +-NUM_PROC_THREADS = 0 ++NUM_PROC_THREADS = 1 + + # If the TIMESTAMP tag is set different from NO then each generated page will + # contain the date or date and time when the page was generated. Setting this to +-- +2.46.0 + diff --git a/0001-Server-Correct-spelling-permision-permission.patch b/0001-Server-Correct-spelling-permision-permission.patch new file mode 100644 index 0000000..e850439 --- /dev/null +++ b/0001-Server-Correct-spelling-permision-permission.patch @@ -0,0 +1,29 @@ +From bdd966dba0b2ad0757811b0b53d5540ae403f16b Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Thu, 5 Sep 2024 22:05:34 +0200 +Subject: [PATCH] =?UTF-8?q?[Server]=20Correct=20spelling=20(permision=20?= + =?UTF-8?q?=E2=86=92=20permission)?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + src/Xrd/XrdConfig.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Xrd/XrdConfig.cc b/src/Xrd/XrdConfig.cc +index e5b51eb59..55b31b841 100644 +--- a/src/Xrd/XrdConfig.cc ++++ b/src/Xrd/XrdConfig.cc +@@ -1432,7 +1432,7 @@ int XrdConfig::SetupAPath() + // + #ifndef WIN32 + if (chmod(AdminPath, AdminMode & ~S_IWGRP)) +- {Log.Emsg("Config", errno, "set permision for admin path", AdminPath); ++ {Log.Emsg("Config", errno, "set permission for admin path", AdminPath); + return 1; + } + #endif +-- +2.46.0 + diff --git a/0001-Unbundle-gtest.patch b/0001-Unbundle-gtest.patch deleted file mode 100644 index 1bbac2e..0000000 --- a/0001-Unbundle-gtest.patch +++ /dev/null @@ -1,25 +0,0 @@ -From cd11f615e749a1fcdd353edd30505c4e8da897db Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Tue, 11 Aug 2026 23:53:15 +0200 -Subject: [PATCH] Unbundle gtest - ---- - cmake/XRootDFindLibs.cmake | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/cmake/XRootDFindLibs.cmake b/cmake/XRootDFindLibs.cmake -index e47dfb83e..3788f5ed4 100644 ---- a/cmake/XRootDFindLibs.cmake -+++ b/cmake/XRootDFindLibs.cmake -@@ -89,7 +89,7 @@ if( ENABLE_XRDOSSARC ) - endif() - - if( ENABLE_TESTS ) -- add_subdirectory(vendor/googletest EXCLUDE_FROM_ALL) -+ find_package( GTest REQUIRED ) - - set( BUILD_TESTS TRUE ) - --- -2.55.0 - diff --git a/0001-Unbundle-tinyxml.patch b/0001-Unbundle-tinyxml.patch deleted file mode 100644 index 9c98c2c..0000000 --- a/0001-Unbundle-tinyxml.patch +++ /dev/null @@ -1,62 +0,0 @@ -From bd81e2e922bd44c755ad77cf29ca45570cc934ec Mon Sep 17 00:00:00 2001 -From: Mattias Ellert -Date: Tue, 21 Apr 2026 00:38:07 +0200 -Subject: [PATCH] Unbundle tinyxml - ---- - cmake/FindTinyXml.cmake | 18 ++++++++++++++++++ - src/XrdXml/tinyxml/CMakeLists.txt | 12 ++++++++++++ - 2 files changed, 30 insertions(+) - create mode 100644 cmake/FindTinyXml.cmake - -diff --git a/cmake/FindTinyXml.cmake b/cmake/FindTinyXml.cmake -new file mode 100644 -index 000000000..75c752707 ---- /dev/null -+++ b/cmake/FindTinyXml.cmake -@@ -0,0 +1,18 @@ -+FIND_PATH(TINYXML_INCLUDE_DIR tinyxml.h -+ HINTS -+ ${TINYXML_DIR} -+ $ENV{TINYXML_DIR} -+ /usr -+ PATH_SUFFIXES include -+) -+ -+FIND_LIBRARY(TINYXML_LIBRARIES tinyxml -+ HINTS -+ ${TINYXML_DIR} -+ $ENV{TINYXML_DIR} -+ /usr -+ PATH_SUFFIXES lib -+) -+ -+INCLUDE(FindPackageHandleStandardArgs) -+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TinyXml DEFAULT_MSG TINYXML_LIBRARIES TINYXML_INCLUDE_DIR) -diff --git a/src/XrdXml/tinyxml/CMakeLists.txt b/src/XrdXml/tinyxml/CMakeLists.txt -index db7d4924e..f87ed8f46 100644 ---- a/src/XrdXml/tinyxml/CMakeLists.txt -+++ b/src/XrdXml/tinyxml/CMakeLists.txt -@@ -1,3 +1,13 @@ -+find_package(TinyXml) -+ -+if(TINYXML_FOUND) -+ -+add_library(XrdTinyXml INTERFACE IMPORTED GLOBAL) -+set_property(TARGET XrdTinyXml PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${TINYXML_INCLUDE_DIR}") -+set_property(TARGET XrdTinyXml PROPERTY INTERFACE_LINK_LIBRARIES "${TINYXML_LIBRARIES}") -+ -+else() -+ - add_library(XrdTinyXml OBJECT - tinystr.cpp tinystr.h - tinyxml.cpp tinyxml.h -@@ -13,3 +23,5 @@ set_target_properties(XrdTinyXml - target_include_directories(XrdTinyXml - PUBLIC $ - ) -+ -+endif() --- -2.53.0 - diff --git a/0002-Add-error-string-to-e2sMap-if-EBADE-is-out-of-range.patch b/0002-Add-error-string-to-e2sMap-if-EBADE-is-out-of-range.patch new file mode 100644 index 0000000..3473cd4 --- /dev/null +++ b/0002-Add-error-string-to-e2sMap-if-EBADE-is-out-of-range.patch @@ -0,0 +1,26 @@ +From f633e0faf13baee78625cf7085bd1442fab39d9c Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Tue, 10 Sep 2024 15:29:18 +0200 +Subject: [PATCH 2/2] Add error string to e2sMap if EBADE is out of range + +--- + src/XrdSys/XrdSysE2T.cc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/XrdSys/XrdSysE2T.cc b/src/XrdSys/XrdSysE2T.cc +index 9f615a911..64daa9827 100644 +--- a/src/XrdSys/XrdSysE2T.cc ++++ b/src/XrdSys/XrdSysE2T.cc +@@ -74,6 +74,9 @@ int initErrTable() + if (EBADE - ERRNOBASE > lastGood) + lastGood = EBADE - ERRNOBASE; + } ++ else { ++ e2sMap[EBADE] = "authentication failed - possible invalid exchange"; ++ } + #endif + + // Supply generic message for missing ones +-- +2.46.0 + diff --git a/sources b/sources index a960b85..bbc28a7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (xrootd-6.1.1.tar.gz) = ac1286cc54c60611bf17b6140b8cd7ef17a8318a4082cae38e5da040199ce4405490e583b376074c3ed29cf2d87c9bbda5da15c6a3091c83c7877abdc3343ebf +SHA512 (xrootd-5.7.1.tar.gz) = 7b6e802d808950332dd2f99c45f6befbf557a33962e97f6e0846c657fd7ef20001b2b116bd7e235d542cbc7433e6afbe2d4006c92c12e370a7dd4389600e3a27 diff --git a/xrootd-sysusers.conf b/xrootd-sysusers.conf deleted file mode 100644 index e5e19f0..0000000 --- a/xrootd-sysusers.conf +++ /dev/null @@ -1,2 +0,0 @@ -# Name ID GECOS Home directory Shell -u xrootd 194 "XRootD runtime user" /var/spool/xrootd - diff --git a/xrootd.spec b/xrootd.spec index d2d55a4..d2e5736 100644 --- a/xrootd.spec +++ b/xrootd.spec @@ -8,22 +8,29 @@ %global ceph 0 %endif +# Needed for EPEL 8 +%undefine __cmake_in_source_build + Name: xrootd Epoch: 1 -Version: 6.1.1 -Release: 1%{?dist} +Version: 5.7.1 +Release: 2%{?dist} Summary: Extended ROOT file server -License: LGPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND curl AND MIT AND Zlib AND Apache-2.0 AND MPL-2.0 +License: LGPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND curl AND MIT AND Zlib URL: https://xrootd.web.cern.ch Source0: %{url}/download/v%{version}/%{name}-%{version}.tar.gz -Source1: %{name}-sysusers.conf - -# Unbundle tinyxml library -Patch0: 0001-Unbundle-tinyxml.patch -# Unbundle googletest/googlemock -Patch1: 0001-Unbundle-gtest.patch -# Make documentation self-contained -Patch2: 0001-Make-documentation-self-contained.patch +# https://github.com/xrootd/xrootd/pull/2328 +Patch0: 0001-Server-Correct-spelling-permision-permission.patch +# https://github.com/xrootd/xrootd/pull/2329 +Patch1: 0001-Protect-against-array-index-out-of-bounds.patch +Patch2: 0002-Add-error-string-to-e2sMap-if-EBADE-is-out-of-range.patch +# https://github.com/xrootd/xrootd/pull/2330 +Patch3: 0001-Change-type-in-XrdSutCacheArg_t-to-long-long.patch +# https://github.com/xrootd/xrootd/pull/2337 +# https://github.com/doxygen/doxygen/issues/11138 +Patch4: 0001-Reproducible-doxygen-output.patch +# https://github.com/xrootd/xrootd/pull/2340 +Patch5: 0001-Increase-client-timeouts-for-XRootD-server-tests.patch BuildRequires: cmake BuildRequires: gcc-c++ @@ -34,16 +41,13 @@ BuildRequires: krb5-devel BuildRequires: libcurl-devel BuildRequires: tinyxml-devel BuildRequires: libxml2-devel -BuildRequires: libzip-devel BuildRequires: ncurses-devel BuildRequires: openssl-devel BuildRequires: perl-generators -%if %{?fedora}%{!?fedora:0} -# picojson not in RHEL/EPEL -BuildRequires: picojson-devel -%endif BuildRequires: readline-devel BuildRequires: zlib-devel +BuildRequires: doxygen +BuildRequires: graphviz BuildRequires: selinux-policy-devel BuildRequires: systemd-rpm-macros BuildRequires: systemd-devel @@ -51,13 +55,13 @@ BuildRequires: python3-devel BuildRequires: python3-pip BuildRequires: python3-setuptools BuildRequires: python3-wheel +BuildRequires: python3-sphinx BuildRequires: json-c-devel -BuildRequires: json-devel BuildRequires: libmacaroons-devel BuildRequires: libuuid-devel BuildRequires: voms-devel BuildRequires: scitokens-cpp-devel -BuildRequires: libxcrypt-devel +BuildRequires: davix-devel %if %{ceph} BuildRequires: librados-devel BuildRequires: libradosstriper-devel @@ -65,21 +69,11 @@ BuildRequires: libradosstriper-devel %ifnarch %{ix86} BuildRequires: isa-l-devel %endif -# For documentation -BuildRequires: doxygen -BuildRequires: graphviz -BuildRequires: python3-sphinx -# For tests BuildRequires: attr -BuildRequires: curl +BuildRequires: davix BuildRequires: gtest-devel -BuildRequires: gmock-devel -BuildRequires: jq -BuildRequires: krb5-server -BuildRequires: krb5-workstation BuildRequires: openssl BuildRequires: procps -BuildRequires: sqlite Requires: %{name}-server%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-selinux = %{epoch}:%{version}-%{release} @@ -104,7 +98,7 @@ Requires: %{name}-client-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-server-libs%{?_isa} = %{epoch}:%{version}-%{release} Requires: expect Requires: logrotate -%{?sysusers_requires_compat} +Requires(pre): shadow-utils %{?systemd_requires} %description server @@ -141,8 +135,6 @@ development. %package client-libs Summary: Libraries used by xrootd clients -Provides: xrdcl-http = %{epoch}:%{version}-%{release} -Obsoletes: xrdcl-http < 1:6.0.0 Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} %description client-libs @@ -237,11 +229,19 @@ SciToken passed during a transfer. Configured appropriately, this allows the XRootD server admin to delegate authorization decisions for a subset of the namespace to an external issuer. +%package -n xrdcl-http +Summary: HTTP client plugin for XRootD +Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} +Requires: %{name}-client-libs%{?_isa} = %{epoch}:%{version}-%{release} + +%description -n xrdcl-http +xrdcl-http is an XRootD client plugin which allows XRootD to interact +with HTTP repositories. + %if %{ceph} %package ceph Summary: XRootD plugin for interfacing with the Ceph storage platform Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release} -Requires: %{name}-server-libs%{?_isa} = %{epoch}:%{version}-%{release} %description ceph The xrootd-ceph is an OSS layer plugin for the XRootD server for @@ -266,30 +266,22 @@ This package contains the API documentation of the xrootd libraries. %prep %setup -q - %patch -P0 -p1 %patch -P1 -p1 %patch -P2 -p1 - -# Delete bundled dependencies -rm src/XrdXml/tinyxml/tiny* -rm -r vendor/bats -rm -r vendor/googletest -%if %{?fedora}%{!?fedora:0} -# picojson not in RHEL/EPEL -rm -r vendor/picojson -%endif +%patch -P3 -p1 +%patch -P4 -p1 +%patch -P5 -p1 %build %cmake \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DFORCE_ENABLED:BOOL=ON \ -DENABLE_TESTS:BOOL=ON \ %if %{ceph} -DENABLE_CEPH:BOOL=ON \ %endif -%ifnarch %{ix86} - -DENABLE_XRDEC:BOOL=ON \ +%ifarch %{ix86} + -DENABLE_XRDEC:BOOL=OFF \ %endif %if %{?fedora}%{!?fedora:0} || %{?rhel}%{!?rhel:0} >= 9 -DPIP_OPTIONS="--no-deps --use-pep517 --no-build-isolation --disable-pip-version-check --verbose" \ @@ -299,9 +291,12 @@ rm -r vendor/picojson -DXRD_PYTHON_REQ_VERSION=%{python3_version} %cmake_build -make -C config -f /usr/share/selinux/devel/Makefile +make -C packaging/common -f /usr/share/selinux/devel/Makefile doxygen Doxyfile +# Use local image instead of remote +sed 's!src=".*/xrootd-logo.png"!src="xrootd-logo.png"!' \ + -i doxydoc/html/index.html cp -p docs/images/xrootd-logo.png doxydoc/html %install @@ -317,48 +312,45 @@ rm -f %{buildroot}%{python3_sitearch}/xrootd-*.*-info/RECORD sed s/pip/rpm/ \ -i %{buildroot}%{python3_sitearch}/xrootd-*.*-info/INSTALLER -rm -f %{buildroot}%{_libdir}/cmake/XRootD/uninstall.cmake - LD_LIBRARY_PATH=%{buildroot}%{_libdir} \ PYTHONPATH=%{buildroot}%{python3_sitearch} \ PYTHONDONTWRITEBYTECODE=1 \ -make -C python/docs html +make -C bindings/python/docs html # Service unit files mkdir -p %{buildroot}%{_unitdir} -install -m 644 -p systemd/xrootd@.service %{buildroot}%{_unitdir} -install -m 644 -p systemd/xrootd@.socket %{buildroot}%{_unitdir} -install -m 644 -p systemd/xrdhttp@.socket %{buildroot}%{_unitdir} -install -m 644 -p systemd/cmsd@.service %{buildroot}%{_unitdir} -install -m 644 -p systemd/frm_xfrd@.service %{buildroot}%{_unitdir} -install -m 644 -p systemd/frm_purged@.service %{buildroot}%{_unitdir} - -mkdir -p %{buildroot}%{_sysusersdir} -install -m 644 -p %{SOURCE1} %{buildroot}%{_sysusersdir}/%{name}.conf +install -m 644 packaging/common/xrootd@.service %{buildroot}%{_unitdir} +install -m 644 packaging/common/xrootd@.socket %{buildroot}%{_unitdir} +install -m 644 packaging/common/xrdhttp@.socket %{buildroot}%{_unitdir} +install -m 644 packaging/common/cmsd@.service %{buildroot}%{_unitdir} +install -m 644 packaging/common/frm_xfrd@.service %{buildroot}%{_unitdir} +install -m 644 packaging/common/frm_purged@.service %{buildroot}%{_unitdir} +mkdir -p %{buildroot}%{_tmpfilesdir} +install -m 644 packaging/rhel/xrootd.tmpfiles %{buildroot}%{_tmpfilesdir}/%{name}.conf # Server config mkdir -p %{buildroot}%{_sysconfdir}/%{name} -install -m 644 -p config/%{name}-clustered.cfg \ +install -m 644 -p packaging/common/%{name}-clustered.cfg \ %{buildroot}%{_sysconfdir}/%{name}/%{name}-clustered.cfg -install -m 644 -p config/%{name}-standalone.cfg \ +install -m 644 -p packaging/common/%{name}-standalone.cfg \ %{buildroot}%{_sysconfdir}/%{name}/%{name}-standalone.cfg -install -m 644 -p config/%{name}-filecache-clustered.cfg \ +install -m 644 -p packaging/common/%{name}-filecache-clustered.cfg \ %{buildroot}%{_sysconfdir}/%{name}/%{name}-filecache-clustered.cfg -install -m 644 -p config/%{name}-filecache-standalone.cfg \ +install -m 644 -p packaging/common/%{name}-filecache-standalone.cfg \ %{buildroot}%{_sysconfdir}/%{name}/%{name}-filecache-standalone.cfg -install -m 644 -p config/%{name}-http.cfg \ +sed 's!/usr/lib64/!!' packaging/common/%{name}-http.cfg > \ %{buildroot}%{_sysconfdir}/%{name}/%{name}-http.cfg # Client config mkdir -p %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d -install -m 644 -p config/client.conf \ +install -m 644 -p packaging/common/client.conf \ %{buildroot}%{_sysconfdir}/%{name}/client.conf -install -m 644 -p config/client.plugins.d/http.conf \ - %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d/http.conf -install -m 644 -p config/client.plugins.d/recorder.conf \ +sed 's!/usr/lib/!!' packaging/common/client-plugin.conf.example > \ + %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d/client-plugin.conf.example +sed -e 's!/usr/lib64/!!' -e 's!-5!!' packaging/common/recorder.conf > \ %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d/recorder.conf -install -m 644 -p config/client.plugins.d/s3.conf \ - %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d/s3.conf +sed 's!/usr/lib64/!!' packaging/common/http.client.conf.example > \ + %{buildroot}%{_sysconfdir}/%{name}/client.plugins.d/xrdcl-http-plugin.conf chmod 644 %{buildroot}%{_datadir}/%{name}/utils/XrdCmsNotify.pm @@ -373,63 +365,63 @@ mkdir -p %{buildroot}%{_sysconfdir}/%{name}/config.d mkdir -p %{buildroot}%{_localstatedir}/log/%{name} mkdir -p %{buildroot}%{_localstatedir}/spool/%{name} -mkdir -p %{buildroot}%{_rundir}/%{name} mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d -install -m 644 -p config/%{name}.logrotate \ +install -m 644 -p packaging/common/%{name}.logrotate \ %{buildroot}%{_sysconfdir}/logrotate.d/%{name} mkdir -p %{buildroot}%{_datadir}/selinux/packages/%{name} -install -m 644 -p config/%{name}.pp \ +install -m 644 -p packaging/common/%{name}.pp \ %{buildroot}%{_datadir}/selinux/packages/%{name} # Documentation mkdir -p %{buildroot}%{_pkgdocdir} cp -pr doxydoc/html %{buildroot}%{_pkgdocdir} -cp -pr python/docs/build/html %{buildroot}%{_pkgdocdir}/python +cp -pr bindings/python/docs/build/html %{buildroot}%{_pkgdocdir}/python rm %{buildroot}%{_pkgdocdir}/python/.buildinfo %check -export HOSTNAME=localhost - # Reduce socket path lengths used during tests # rpm 4.20 uses a longer path to the build directory than earlier versions # Tests fail with sockets in the build directory with rpm 4.20 adminpath=$(mktemp -d -p /var/tmp) -trap "rm -rf ${adminpath}" EXIT - -sed "s!all.adminpath .*!all.adminpath ${adminpath}/XRootD!" \ - -i tests/XRootD/common.cfg - -for x in authenticated_cluster badredir cluster TPCTests xcachewithcsi ; do - sed "s!all.adminpath .*!all.adminpath ${adminpath}/${x}!" \ - -i %{_vpath_builddir}/tests/${x}/common.cfg -done - -# The badredir test fails when there is no network - exclude -# The posix test is broken for 32 bit archs ... -# https://github.com/xrootd/xrootd/issues/2559 +sed "s!all.adminpath .*!all.adminpath ${adminpath}!" \ + -i %{_vpath_builddir}/tests/cluster/common.cfg \ + tests/XRootD/common.cfg touch testfile if ( setfattr -n user.testattr -v testvalue testfile ) ; then - %ctest -- -E \ -XRootD::badredir\|\ -%ifarch %{ix86} %{arm} -XRootD::posix\|\ -%endif -XrdCl::FileSystemTest.PlugInTest\|\ -XrdCl::FileTest.PlugInTest + %ctest else echo "Extended file attributes not supported by file system" - echo "*** NOT RUNNING TESTS ***" + echo "Don't run tests that require them" + exclude="\ +XrdCl::FileCopyTest|\ +XrdCl::FileSystemTest.PlugInTest|\ +XrdCl::FileSystemTest.ServerQueryTest|\ +XrdCl::FileSystemTest.XAttrTest|\ +XrdCl::FileTest.XAttrTest|\ +XrdCl::LocalFileHandlerTest.XAttrTest|\ +XrdCl::ThreadingTest|\ +XrdCl::WorkflowTest.CheckpointTest|\ +XrdCl::WorkflowTest.XAttrWorkflowTest|\ +XrdEc::|\ +XRootD::cluster::test" + %ctest -- -E $exclude fi rm testfile +rm -rf ${adminpath} + %pre server -%sysusers_create_compat %{SOURCE1} +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || useradd -r -g %{name} -s /sbin/nologin \ + -d %{_localstatedir}/spool/%{name} -c "XRootD runtime user" %{name} %post server +%tmpfiles_create %{name}.conf + if [ $1 -eq 1 ] ; then systemctl daemon-reload >/dev/null 2>&1 || : fi @@ -492,7 +484,7 @@ fi %dir %{_datadir}/%{name} %{_datadir}/%{name}/utils %{_unitdir}/* -%{_sysusersdir}/%{name}.conf +%{_tmpfilesdir}/%{name}.conf %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %dir %{_sysconfdir}/%{name}/config.d %attr(-,xrootd,xrootd) %config(noreplace) %{_sysconfdir}/%{name}/*.cfg @@ -511,18 +503,18 @@ fi %{_libdir}/libXrdUtils.so.* %{_libdir}/libXrdXml.so.* # Plugins -%{_libdir}/libXrdCksCalczcrc32-6.so -%{_libdir}/libXrdCryptossl-6.so -%{_libdir}/libXrdSec-6.so -%{_libdir}/libXrdSecProt-6.so -%{_libdir}/libXrdSecgsi-6.so -%{_libdir}/libXrdSecgsiAUTHZVO-6.so -%{_libdir}/libXrdSecgsiGMAPDN-6.so -%{_libdir}/libXrdSeckrb5-6.so -%{_libdir}/libXrdSecpwd-6.so -%{_libdir}/libXrdSecsss-6.so -%{_libdir}/libXrdSecunix-6.so -%{_libdir}/libXrdSecztn-6.so +%{_libdir}/libXrdCksCalczcrc32-5.so +%{_libdir}/libXrdCryptossl-5.so +%{_libdir}/libXrdSec-5.so +%{_libdir}/libXrdSecProt-5.so +%{_libdir}/libXrdSecgsi-5.so +%{_libdir}/libXrdSecgsiAUTHZVO-5.so +%{_libdir}/libXrdSecgsiGMAPDN-5.so +%{_libdir}/libXrdSeckrb5-5.so +%{_libdir}/libXrdSecpwd-5.so +%{_libdir}/libXrdSecsss-5.so +%{_libdir}/libXrdSecunix-5.so +%{_libdir}/libXrdSecztn-5.so %license COPYING* LICENSE %files devel @@ -543,7 +535,6 @@ fi %{_libdir}/libXrdUtils.so %{_libdir}/libXrdXml.so %{_libdir}/cmake/XRootD -%{_mandir}/man1/xrootd-config.1* %files client-libs %{_libdir}/libXrdCl.so.* @@ -558,20 +549,16 @@ fi %{_libdir}/libXrdSsiLib.so.* %{_libdir}/libXrdSsiShMap.so.* # Plugins -%{_libdir}/libXrdClHttp-6.so -%{_libdir}/libXrdClProxyPlugin-6.so -%{_libdir}/libXrdClRecorder-6.so -%{_libdir}/libXrdClS3-6.so +%{_libdir}/libXrdClProxyPlugin-5.so +%{_libdir}/libXrdClRecorder-5.so %dir %{_sysconfdir}/%{name} %config(noreplace) %{_sysconfdir}/%{name}/client.conf %dir %{_sysconfdir}/%{name}/client.plugins.d -%config(noreplace) %{_sysconfdir}/%{name}/client.plugins.d/http.conf +%config(noreplace) %{_sysconfdir}/%{name}/client.plugins.d/client-plugin.conf.example %config(noreplace) %{_sysconfdir}/%{name}/client.plugins.d/recorder.conf -%config(noreplace) %{_sysconfdir}/%{name}/client.plugins.d/s3.conf %files client-devel %{_includedir}/%{name}/XrdCl -%{_includedir}/%{name}/XrdClHttp %{_includedir}/%{name}/XrdPosix %{_libdir}/libXrdCl.so %{_libdir}/libXrdFfs.so @@ -581,28 +568,23 @@ fi %{_libdir}/libXrdHttpUtils.so.* %{_libdir}/libXrdServer.so.* # Plugins -%{_libdir}/libXrdBlacklistDecision-6.so -%{_libdir}/libXrdBwm-6.so -%{_libdir}/libXrdCmsRedirectLocal-6.so -%{_libdir}/libXrdFileCache-6.so -%{_libdir}/libXrdHttp-6.so -%{_libdir}/libXrdHttpCors-6.so -%{_libdir}/libXrdHttpTPC-6.so -%{_libdir}/libXrdMacaroons-6.so -%{_libdir}/libXrdN2No2p-6.so -%{_libdir}/libXrdOfsPrepGPI-6.so -%{_libdir}/libXrdOssArc-6.so -%{_libdir}/libXrdOssCsi-6.so -%{_libdir}/libXrdOssMirage-6.so -%{_libdir}/libXrdOssSIgpfsT-6.so -%{_libdir}/libXrdOssStats-6.so -%{_libdir}/libXrdPfc-6.so -%{_libdir}/libXrdPfcPurgeQuota-6.so -%{_libdir}/libXrdPss-6.so -%{_libdir}/libXrdSsi-6.so -%{_libdir}/libXrdSsiLog-6.so -%{_libdir}/libXrdThrottle-6.so -%{_libdir}/libXrdXrootd-6.so +%{_libdir}/libXrdBlacklistDecision-5.so +%{_libdir}/libXrdBwm-5.so +%{_libdir}/libXrdCmsRedirectLocal-5.so +%{_libdir}/libXrdFileCache-5.so +%{_libdir}/libXrdHttp-5.so +%{_libdir}/libXrdHttpTPC-5.so +%{_libdir}/libXrdMacaroons-5.so +%{_libdir}/libXrdN2No2p-5.so +%{_libdir}/libXrdOfsPrepGPI-5.so +%{_libdir}/libXrdOssCsi-5.so +%{_libdir}/libXrdOssSIgpfsT-5.so +%{_libdir}/libXrdPfc-5.so +%{_libdir}/libXrdPss-5.so +%{_libdir}/libXrdSsi-5.so +%{_libdir}/libXrdSsiLog-5.so +%{_libdir}/libXrdThrottle-5.so +%{_libdir}/libXrdXrootd-5.so %files server-devel %{_includedir}/%{name}/XrdAcc @@ -649,21 +631,25 @@ fi %{_mandir}/man1/xrootdfs.1* %files voms -%{_libdir}/libXrdVoms-6.so -%{_libdir}/libXrdHttpVOMS-6.so -%{_libdir}/libXrdSecgsiVOMS-6.so +%{_libdir}/libXrdVoms-5.so +%{_libdir}/libXrdHttpVOMS-5.so +%{_libdir}/libXrdSecgsiVOMS-5.so %doc %{_mandir}/man1/libXrdVoms.1* %doc %{_mandir}/man1/libXrdSecgsiVOMS.1* %doc src/XrdVoms/README.md %files scitokens -%{_libdir}/libXrdAccSciTokens-6.so +%{_libdir}/libXrdAccSciTokens-5.so %doc src/XrdSciTokens/README.md +%files -n xrdcl-http +%{_libdir}/libXrdClHttp-5.so +%config(noreplace) %{_sysconfdir}/%{name}/client.plugins.d/xrdcl-http-plugin.conf + %if %{ceph} %files ceph -%{_libdir}/libXrdCeph-6.so -%{_libdir}/libXrdCephXattr-6.so +%{_libdir}/libXrdCeph-5.so +%{_libdir}/libXrdCephXattr-5.so %{_libdir}/libXrdCephPosix.so.* %endif @@ -676,105 +662,6 @@ fi %doc %{_pkgdocdir} %changelog -* Wed Aug 12 2026 Mattias Ellert - 1:6.1.1-1 -- Update to version 6.1.1 - -* Wed Jul 22 2026 Python Maint - 1:6.1.0-3 -- Rebuilt for Python 3.15.0b4 ABI change - -* Fri Jul 17 2026 Fedora Release Engineering - 1:6.1.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild - -* Tue Jun 23 2026 Mattias Ellert - 1:6.1.0-1 -- Update to version 6.1.0 -- Drop patches accepted upstream - -* Sat Jun 13 2026 Yaakov Selkowitz - 1:6.0.3-3 -- Rebuilt for openssl 4.0 - -* Thu Jun 04 2026 Python Maint - 1:6.0.3-2 -- Rebuilt for Python 3.15 - -* Tue Jun 02 2026 Mattias Ellert - 1:6.0.3-1 -- Update to version 6.0.3 - -* Thu May 21 2026 Mattias Ellert - 1:6.0.2-1 -- Update to version 6.0.2 -- Adapt to OpenSSL 4.0 -- Drop patches accepted upstream - -* Sat Apr 11 2026 Mattias Ellert - 1:6.0.0-1 -- Update to version 6.0.0 - -* Fri Mar 27 2026 Mattias Ellert - 1:5.9.2-1 -- Update to version 5.9.2 -- Drop patches accepted upstream or previously backported - -* Sat Jan 17 2026 Fedora Release Engineering - 1:5.9.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild - -* Tue Nov 18 2025 Mattias Ellert - 1:5.9.1-1 -- Update to version 5.9.1 - -* Fri Oct 10 2025 Mattias Ellert - 1:5.9.0-1 -- Update to version 5.9.0 - -* Fri Sep 19 2025 Python Maint - 1:5.8.4-4 -- Rebuilt for Python 3.14.0rc3 bytecode - -* Fri Aug 15 2025 Python Maint - 1:5.8.4-3 -- Rebuilt for Python 3.14.0rc2 bytecode - -* Fri Jul 25 2025 Fedora Release Engineering - 1:5.8.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Sun Jul 13 2025 Mattias Ellert - 1:5.8.4-1 -- Update to version 5.8.4 - -* Fri Jun 06 2025 Mattias Ellert - 1:5.8.3-1 -- Update to version 5.8.3 - -* Tue Jun 03 2025 Python Maint - 1:5.8.2-2 -- Rebuilt for Python 3.14 - -* Sun May 11 2025 Mattias Ellert - 1:5.8.2-1 -- Update to version 5.8.2 -- Use reserved uid and gid 194 for the xrootd user - - https://pagure.io/packaging-committee/issue/1444 - - https://src.fedoraproject.org/rpms/setup/pull-request/27 - -* Wed Apr 16 2025 Mattias Ellert - 1:5.8.1-1 -- Update to version 5.8.1 - -* Sat Mar 22 2025 Mattias Ellert - 1:5.8.0-1 -- Update to version 5.8.0 - -* Sat Mar 08 2025 Mattias Ellert - 1:5.7.3-4 -- Move user/group creation logic to sysusers.d fragment - -* Wed Feb 19 2025 Mattias Ellert - 1:5.7.3-3 -- Set HOSTNAME to localhost during testing - -* Sat Feb 01 2025 Björn Esser - 1:5.7.3-2 -- Add explicit BR: libxcrypt-devel - -* Wed Jan 29 2025 Mattias Ellert - 1:5.7.3-1 -- Update to version 5.7.3 -- Drop patches accepted upstream - -* Thu Jan 23 2025 Mattias Ellert - 1:5.7.2-4 -- Use CMAKE_BUILD_TYPE RelWithDebInfo to avoid -Werror in compiler flags - -* Sun Jan 19 2025 Mattias Ellert - 1:5.7.2-3 -- Fix compilation errors with GCC 15 - -* Sun Dec 08 2024 Mattias Ellert - 1:5.7.2-2 -- Fix errors in format strings - -* Fri Nov 29 2024 Mattias Ellert - 1:5.7.2-1 -- Update to version 5.7.2 -- Drop patches accepted upstream - * Mon Sep 16 2024 Mattias Ellert - 1:5.7.1-2 - Workaround doxygen non-reproducibility - make doc package noarch again - Increase client timeouts for XRootD server tests