Skip to content

Commit 5491058

Browse files
committed
Create filter plugin
The new plugin, `libXrdOssFilter.so`, allows the administrator to only permit the opening / listings of files and directories that match specified globs or prefixes. This can be used to keep some storage from being visible via XRootD (even with the appropriate permissions). For example, to hide all files and directories beginning with "." from being exported, one could setup: ``` ofs.osslib ++ libXrdOssFilter.so filter.glob /** ``` (This policy would be quite difficult to implement via the existing authorization frameworks)
1 parent 74d9dce commit 5491058

File tree

7 files changed

+1290
-5
lines changed

7 files changed

+1290
-5
lines changed

CMakeLists.txt

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ endif()
6969
#
7070
add_definitions( -D_FILE_OFFSET_BITS=64 )
7171

72+
######################
73+
## libXrdOssS3 ##
74+
######################
7275
# On Linux, we hide all the symbols for the final libraries, exposing only what's needed for the XRootD
7376
# runtime loader. So here we create the object library and will create a separate one for testing with
7477
# the symbols exposed.
@@ -80,6 +83,9 @@ target_link_libraries(XrdS3Obj ${XRootD_UTILS_LIBRARIES} ${XRootD_SERVER_LIBRARI
8083
add_library(XrdS3 MODULE "$<TARGET_OBJECTS:XrdS3Obj>")
8184
target_link_libraries(XrdS3 XrdS3Obj)
8285

86+
######################
87+
## libXrdOssHTTP ##
88+
######################
8389
add_library(XrdHTTPServerObj OBJECT src/CurlUtil.cc src/HTTPFile.cc src/HTTPFileSystem.cc src/HTTPCommands.cc src/TokenFile.cc src/stl_string_utils.cc src/shortfile.cc src/logging.cc)
8490
set_target_properties(XrdHTTPServerObj PROPERTIES POSITION_INDEPENDENT_CODE ON)
8591
target_include_directories(XrdHTTPServerObj PRIVATE ${XRootD_INCLUDE_DIRS})
@@ -88,12 +94,26 @@ target_link_libraries(XrdHTTPServerObj ${XRootD_UTILS_LIBRARIES} ${XRootD_SERVER
8894
add_library(XrdHTTPServer MODULE "$<TARGET_OBJECTS:XrdHTTPServerObj>")
8995
target_link_libraries(XrdHTTPServer XrdHTTPServerObj)
9096

91-
if(NOT APPLE)
92-
set_target_properties(XrdS3 PROPERTIES OUTPUT_NAME "XrdS3-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/configs/export-lib-symbols")
93-
set_target_properties(XrdHTTPServer PROPERTIES OUTPUT_NAME "XrdHTTPServer-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/configs/export-lib-symbols")
97+
######################
98+
## libXrdOssFilter ##
99+
######################
100+
add_library( XrdOssFilterObj OBJECT src/Filter.cc src/logging.cc )
101+
set_target_properties( XrdOssFilterObj PROPERTIES POSITION_INDEPENDENT_CODE ON )
102+
target_include_directories( XrdOssFilterObj PRIVATE ${XRootD_INCLUDE_DIRS} )
103+
target_link_libraries( XrdOssFilterObj ${XRootD_UTILS_LIBRARIES} ${XRootD_SERVER_LIBRARIES} )
104+
105+
add_library( XrdOssFilter MODULE "$<TARGET_OBJECTS:XrdOssFilterObj>" )
106+
target_link_libraries( XrdOssFilter XrdOssFilterObj )
107+
108+
# Customize module's suffix and, on Linux, hide unnecessary symbols
109+
if( APPLE )
110+
set_target_properties( XrdS3 PROPERTIES OUTPUT_NAME "XrdS3-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" )
111+
set_target_properties( XrdHTTPServer PROPERTIES OUTPUT_NAME "XrdHTTPServer-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" )
112+
set_target_properties( XrdOssFilter PROPERTIES OUTPUT_NAME "XrdOssFilter-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" )
94113
else()
95-
set_target_properties(XrdS3 PROPERTIES OUTPUT_NAME "XrdS3-${XRootD_PLUGIN_VERSION}" SUFFIX ".so")
96-
set_target_properties(XrdHTTPServer PROPERTIES OUTPUT_NAME "XrdHTTPServer-${XRootD_PLUGIN_VERSION}" SUFFIX ".so")
114+
set_target_properties( XrdS3 PROPERTIES OUTPUT_NAME "XrdS3-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/configs/export-lib-symbols" )
115+
set_target_properties( XrdHTTPServer PROPERTIES OUTPUT_NAME "XrdHTTPServer-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/configs/export-lib-symbols" )
116+
set_target_properties( XrdOssFilter PROPERTIES OUTPUT_NAME "XrdOssFilter-${XRootD_PLUGIN_VERSION}" SUFFIX ".so" LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/configs/export-lib-symbols" )
97117
endif()
98118

99119
SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Install path for libraries")
@@ -104,13 +124,20 @@ install(
104124
)
105125

106126
if( BUILD_TESTING )
127+
# Create shared libraries for testing from the existing objects
107128
add_library(XrdS3Testing SHARED "$<TARGET_OBJECTS:XrdS3Obj>")
108129
target_link_libraries(XrdS3Testing XrdS3Obj)
109130
target_include_directories(XrdS3Testing INTERFACE ${XRootD_INCLUDE_DIRS})
131+
110132
add_library(XrdHTTPServerTesting SHARED "$<TARGET_OBJECTS:XrdHTTPServerObj>")
111133
target_link_libraries(XrdHTTPServerTesting XrdHTTPServerObj)
112134
target_include_directories(XrdHTTPServerTesting INTERFACE ${XRootD_INCLUDE_DIRS})
113135

136+
add_library( XrdOssFilterTesting SHARED "$<TARGET_OBJECTS:XrdOssFilterObj>" )
137+
target_link_libraries( XrdOssFilterTesting XrdOssFilterObj )
138+
target_include_directories( XrdOssFilterTesting INTERFACE ${XRootD_INCLUDE_DIRS} )
139+
140+
# Ensure that GTest is available
114141
if( NOT XROOTD_PLUGINS_EXTERNAL_GTEST )
115142
include( FetchContent )
116143
set( GTEST_URL "${CMAKE_CURRENT_SOURCE_DIR}/googletest-1.15.2.tar.gz" )
@@ -127,6 +154,7 @@ if( BUILD_TESTING )
127154
else()
128155
find_package(GTest REQUIRED)
129156
endif()
157+
130158
enable_testing()
131159
add_subdirectory(test)
132160
endif()

0 commit comments

Comments
 (0)