Compare commits

..

4 Commits

Author SHA1 Message Date
OpenAI Build Bot
a8f9e7e9ab Treat base64 key EOF as successful decode 2026-06-05 21:56:22 +02:00
OpenAI Build Bot
b02c348124 Handle missing dictionary-name keys as no conflict 2026-06-05 21:48:59 +02:00
Mario Fetka
4c3f2afecf Scope NICI support to classic FLAIM targets 2026-06-05 21:18:02 +02:00
OpenAI
4ddfe31a5a Disable experimental FlaimSQL by default 2026-06-05 20:29:39 +02:00
3 changed files with 46 additions and 14 deletions

View File

@@ -6,7 +6,7 @@ include(CTest)
option(NWFLAIM_BUILD_SHARED "Build shared nwflaim libraries" ON)
option(NWFLAIM_BUILD_STATIC "Build static nwflaim libraries" OFF)
option(NWFLAIM_BUILD_SQL "Build SQL FLAIM library" ON)
option(NWFLAIM_BUILD_SQL "Build experimental SQL FLAIM library" OFF)
option(NWFLAIM_BUILD_XFLAIM "Build XML FLAIM library" ON)
option(NWFLAIM_BUILD_TOOLS "Build installable FLAIM command line tools with nw-prefixed names" ON)
option(NWFLAIM_WITH_OPENSSL "Build FTK legacy OpenSSL/TLS helpers" ON)
@@ -38,9 +38,12 @@ set(_nwflaim_common_defs
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
list(APPEND _nwflaim_common_defs FLM_64BIT)
endif()
if(NWFLAIM_USE_NICI)
list(APPEND _nwflaim_common_defs FLM_USE_NICI)
endif()
# FLM_USE_NICI is intentionally not part of the global/default define set.
# Classic FLAIM and its own tools use the NICI/CCS encrypted-storage path,
# but XFLAIM has a separate NICI implementation with a different historical
# API surface. Enabling FLM_USE_NICI globally makes xflaim/src/f_nici.cpp
# compile against the classic compatibility headers and breaks the default
# mars-nwe build.
find_package(Threads REQUIRED)
find_library(NWFLAIM_RT_LIBRARY rt)
@@ -367,6 +370,16 @@ set(NWFLAIM_XFLAIM_SOURCES
xflaim/src/scache.cpp
xflaim/src/translog.cpp)
function(nwflaim_enable_classic_nici target_name)
if(NWFLAIM_USE_NICI AND TARGET ${target_name})
target_compile_definitions(${target_name} PRIVATE FLM_USE_NICI)
if(NOT NWFLAIM_NICI_INCLUDE_DIR STREQUAL "")
target_include_directories(${target_name} PRIVATE "${NWFLAIM_NICI_INCLUDE_DIR}")
endif()
endif()
endfunction()
function(nwflaim_common_target target_name public_include_dir install_include_dir)
target_compile_features(${target_name} PUBLIC cxx_std_98)
target_compile_definitions(${target_name} PRIVATE ${_nwflaim_common_defs})
@@ -379,9 +392,6 @@ function(nwflaim_common_target target_name public_include_dir install_include_di
"${CMAKE_CURRENT_SOURCE_DIR}/flaim/src"
"${CMAKE_CURRENT_SOURCE_DIR}/sql/src"
"${CMAKE_CURRENT_SOURCE_DIR}/xflaim/src")
if(NWFLAIM_USE_NICI AND NOT NWFLAIM_NICI_INCLUDE_DIR STREQUAL "")
target_include_directories(${target_name} PRIVATE "${NWFLAIM_NICI_INCLUDE_DIR}")
endif()
target_link_libraries(${target_name} PUBLIC Threads::Threads)
if(CURSES_INCLUDE_DIRS)
target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIRS})
@@ -411,9 +421,6 @@ function(nwflaim_common_private_target target_name)
"${CMAKE_CURRENT_SOURCE_DIR}/sql/src"
"${CMAKE_CURRENT_SOURCE_DIR}/xflaim/src"
"${CMAKE_CURRENT_SOURCE_DIR}/xflaim/util")
if(NWFLAIM_USE_NICI AND NOT NWFLAIM_NICI_INCLUDE_DIR STREQUAL "")
target_include_directories(${target_name} PRIVATE "${NWFLAIM_NICI_INCLUDE_DIR}")
endif()
target_link_libraries(${target_name} PRIVATE Threads::Threads)
if(CURSES_INCLUDE_DIRS)
target_include_directories(${target_name} PRIVATE ${CURSES_INCLUDE_DIRS})
@@ -478,18 +485,20 @@ endif()
nwflaim_add_library(flaim flaim flaim/src "${CMAKE_INSTALL_INCLUDEDIR}/nwflaim" "${NWFLAIM_FLAIM_LIBRARY_VERSION}" "${NWFLAIM_FLAIM_LIBRARY_SOVERSION}" ${NWFLAIM_FLAIM_SOURCES})
if(TARGET flaim)
target_link_libraries(flaim PUBLIC flaimtk)
nwflaim_enable_classic_nici(flaim)
endif()
if(TARGET flaim_static)
target_link_libraries(flaim_static PUBLIC flaimtk_static)
nwflaim_enable_classic_nici(flaim_static)
endif()
if(NWFLAIM_BUILD_SQL)
nwflaim_add_library(flaimsql flaimsql sql/src "${CMAKE_INSTALL_INCLUDEDIR}/nwflaim" "${NWFLAIM_SQL_LIBRARY_VERSION}" "${NWFLAIM_SQL_LIBRARY_SOVERSION}" ${NWFLAIM_SQL_SOURCES})
if(TARGET flaimsql)
target_link_libraries(flaimsql PUBLIC flaim)
target_link_libraries(flaimsql PUBLIC flaimtk)
endif()
if(TARGET flaimsql_static)
target_link_libraries(flaimsql_static PUBLIC flaim_static)
target_link_libraries(flaimsql_static PUBLIC flaimtk_static)
endif()
endif()
@@ -510,17 +519,21 @@ if(NWFLAIM_BUILD_TOOLS)
flaim/util/flm_lutl.cpp
flaim/util/sharutil.cpp)
nwflaim_common_private_target(flaim_util_objects)
nwflaim_enable_classic_nici(flaim_util_objects)
target_include_directories(flaim_util_objects PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/flaim/util")
nwflaim_add_tool(flmcheckdb_tool nwflmcheckdb flaim
flaim/util/checkdb.cpp
$<TARGET_OBJECTS:flaim_util_objects>)
nwflaim_enable_classic_nici(flmcheckdb_tool)
nwflaim_add_tool(flmrebuild_tool nwflmrebuild flaim
flaim/util/rebuild.cpp
$<TARGET_OBJECTS:flaim_util_objects>)
nwflaim_enable_classic_nici(flmrebuild_tool)
nwflaim_add_tool(flmgigatest_tool nwflmgigatest flaim
flaim/util/gigatest.cpp
$<TARGET_OBJECTS:flaim_util_objects>)
nwflaim_enable_classic_nici(flmgigatest_tool)
nwflaim_add_tool(flmview_tool nwflmview flaim
flaim/util/viewblk.cpp
flaim/util/view.cpp
@@ -532,10 +545,12 @@ if(NWFLAIM_BUILD_TOOLS)
flaim/util/viewmenu.cpp
flaim/util/viewsrch.cpp
$<TARGET_OBJECTS:flaim_util_objects>)
nwflaim_enable_classic_nici(flmview_tool)
nwflaim_add_tool(flmdbshell_tool nwflmdbshell flaim
flaim/util/dbshell.cpp
flaim/util/flm_edit.cpp
$<TARGET_OBJECTS:flaim_util_objects>)
nwflaim_enable_classic_nici(flmdbshell_tool)
if(NWFLAIM_BUILD_XFLAIM)
add_library(xflaim_util_objects OBJECT

View File

@@ -1539,7 +1539,15 @@ RCODE F_CCS::setKeyFromStore(
if( RC_BAD( rc = B64Decoder.read(
(void *)pucKeyBuf, ui32BufLen, &uiLength)))
{
goto Exit;
if( rc != FERR_EOF_HIT)
{
goto Exit;
}
// F_Base64DecoderIStream signals end-of-stream with EOF after
// returning the decoded bytes. In this path EOF is a successful
// completion, not a failed key decode.
rc = FERR_OK;
}
pucTmp = pucKeyBuf;
}

View File

@@ -2508,7 +2508,16 @@ FSTATIC RCODE DDCheckNameConflict(
if (RC_BAD( rc = FSBtSearch( pDb, pDictIxLFile, &pStack,
IxKeyBuf, uiKeyLen, 0L)))
{
goto Exit;
if (rc == FERR_EOF_HIT)
{
// No matching dictionary-name key exists yet, so there is no
// name conflict. Treat end-of-index as a successful miss.
rc = FERR_OK;
}
else
{
goto Exit;
}
}
if (pStack->uiCmpStatus == BT_EQ_KEY)