Move FLAG, GRANT and REMOVE closer to the request paths used by the Novell tools and extend the DOS comparison tests. FLAG now reads attributes through the old NCP22 directory scan path and writes them through NCP22/25 Set Directory/File Information. This keeps extended attributes such as Delete Inhibit and Rename Inhibit intact and matches the Novell behavior observed in the server logs. GRANT now prefers NCP22/27 SetTrustee with an NCP87 fallback. Supervisor rights are expanded like Novell does, so granting S sends and reports the full SRWCEMFA mask. The visible output, path formatting and error text are adjusted to match the Novell baseline. REMOVE now prefers NCP22/2B DelTrustee with an NCP87 fallback. The DelTrustee request layout is corrected, /SUBDIRS handling is aligned with Novell, and the output/error text is matched to the baseline. The FLAG, FLAGDIR, GRANT and REMOVE tests now compare NPUBLIC baselines against the PUBLIC implementations and add delayed NOPASSUSER readback checks using DLYSTRT and the maintainer LOGIN password option.
266 lines
8.3 KiB
CMake
266 lines
8.3 KiB
CMake
# DOS utilities for mars-nwe.
|
|
#
|
|
# Default install mode uses a split:
|
|
# - legacy command names are installed from netold.exe
|
|
# - new command names that netold.exe does not contain are installed from net.exe
|
|
#
|
|
# Maintainer mode can rebuild the new net.exe with Open Watcom. The freshly
|
|
# built binary is only installed when MARS_NWE_INSTALL_NEW_DOSUTILS is ON, or
|
|
# for the new-only command names in the default split install.
|
|
|
|
option(MAINTAINER_BUILD "Enable maintainer-only DOS tool helpers and diagnostics" OFF)
|
|
|
|
if(DEFINED MARS_NWE_VERSION_BASE)
|
|
set(MARS_DOSUTILS_VERSION "${MARS_NWE_VERSION_BASE}")
|
|
else()
|
|
set(MARS_DOSUTILS_VERSION "0.99")
|
|
endif()
|
|
|
|
set(MARS_DOSUTILS_LEGACY_NET_EXE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/netold.exe"
|
|
CACHE FILEPATH "Legacy/pre-Client32 DOS net.exe used by default for legacy command names"
|
|
)
|
|
|
|
set(MARS_DOSUTILS_NEW_NET_EXE
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/net.exe"
|
|
CACHE FILEPATH "New/experimental DOS net.exe used for new-only tools or when MARS_NWE_INSTALL_NEW_DOSUTILS is ON"
|
|
)
|
|
|
|
set(MARS_DOSUTILS_LEGACY_TOOLS
|
|
net
|
|
login
|
|
profile
|
|
spawn
|
|
passwd
|
|
path
|
|
pathins
|
|
pathdel
|
|
map
|
|
mapdel
|
|
logout
|
|
capture
|
|
endcap
|
|
)
|
|
|
|
# Tools not present in netold.exe. These are installed from the new binary
|
|
# even in the default split mode.
|
|
set(MARS_DOSUTILS_NEW_ONLY_TOOLS
|
|
slist
|
|
flag
|
|
flagdir
|
|
rights
|
|
grant
|
|
revoke
|
|
remove
|
|
ndir
|
|
creator
|
|
whoami
|
|
)
|
|
|
|
if(MARS_NWE_BUILD_DOSUTILS)
|
|
find_package(OpenWatcom REQUIRED)
|
|
|
|
set(DOSUTILS_C_SOURCES
|
|
net.c
|
|
tools.c
|
|
netcall.c
|
|
ncpcall.c
|
|
login.c
|
|
map.c
|
|
slist.c
|
|
ndir.c
|
|
flag.c
|
|
flagdir.c
|
|
rights.c
|
|
grant.c
|
|
revoke.c
|
|
remove.c
|
|
trustee.c
|
|
c32ncp.c
|
|
nwcrypt.c
|
|
nwdebug.c
|
|
nwtests.c
|
|
capture.c
|
|
creator.c
|
|
whoami.c
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
"${OPENWATCOM_WASM}"
|
|
-q
|
|
-zq
|
|
-fo="${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
VERBATIM
|
|
)
|
|
|
|
set(DOSUTILS_OBJECTS)
|
|
foreach(src IN LISTS DOSUTILS_C_SOURCES)
|
|
get_filename_component(obj_name "${src}" NAME_WE)
|
|
set(obj "${CMAKE_CURRENT_BINARY_DIR}/${obj_name}.obj")
|
|
list(APPEND DOSUTILS_OBJECTS "${obj}")
|
|
|
|
set(DOSUTILS_WCL_DEFS -dMARS_DOSUTILS_VERSION=\"${MARS_DOSUTILS_VERSION}\")
|
|
if(MAINTAINER_BUILD)
|
|
list(APPEND DOSUTILS_WCL_DEFS -dMAINTAINER_BUILD)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT "${obj}"
|
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
"${OPENWATCOM_WCL}"
|
|
-q
|
|
-zq
|
|
-bt=dos
|
|
-ml
|
|
-0
|
|
${DOSUTILS_WCL_DEFS}
|
|
-c
|
|
-fo="${obj}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
|
|
DEPENDS
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/net.h"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/kern.h"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/c32ncp.h"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/nwcrypt.h"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
VERBATIM
|
|
)
|
|
endforeach()
|
|
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
"${OPENWATCOM_WCL}"
|
|
-q
|
|
-zq
|
|
-bt=dos
|
|
-ml
|
|
-0
|
|
-k32768
|
|
-fe="${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
|
${DOSUTILS_OBJECTS}
|
|
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
|
DEPENDS
|
|
${DOSUTILS_OBJECTS}
|
|
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(dosutils_net ALL
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
|
|
)
|
|
|
|
set(MARS_DOSUTILS_BUILT_NET_EXE "${CMAKE_CURRENT_BINARY_DIR}/net.exe")
|
|
|
|
if(MAINTAINER_BUILD)
|
|
add_custom_command(
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
"${OPENWATCOM_WCL}"
|
|
-q
|
|
-zq
|
|
-bt=dos
|
|
-ms
|
|
-0
|
|
-dMAINTAINER_BUILD
|
|
-fe="${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/dlystrt.c"
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/dlystrt.c"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(dlystrt ALL
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
)
|
|
endif()
|
|
else()
|
|
set(MARS_DOSUTILS_BUILT_NET_EXE "")
|
|
endif()
|
|
|
|
if(MARS_NWE_BUILD_DOSUTILS)
|
|
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_BUILT_NET_EXE}")
|
|
else()
|
|
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_NEW_NET_EXE}")
|
|
endif()
|
|
|
|
if(MARS_NWE_INSTALL_NEW_DOSUTILS)
|
|
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
|
else()
|
|
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_LEGACY_NET_EXE}")
|
|
endif()
|
|
|
|
set(MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT FALSE)
|
|
set(MARS_DOSUTILS_SELECTED_NEW_IS_BUILT FALSE)
|
|
if(MARS_NWE_BUILD_DOSUTILS)
|
|
if(MARS_DOSUTILS_SELECTED_LEGACY_EXE STREQUAL MARS_DOSUTILS_BUILT_NET_EXE)
|
|
set(MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT TRUE)
|
|
endif()
|
|
if(MARS_DOSUTILS_SELECTED_NEW_EXE STREQUAL MARS_DOSUTILS_BUILT_NET_EXE)
|
|
set(MARS_DOSUTILS_SELECTED_NEW_IS_BUILT TRUE)
|
|
endif()
|
|
endif()
|
|
|
|
if(MARS_NWE_INSTALL_DOSUTILS)
|
|
if(NOT MARS_DOSUTILS_SELECTED_LEGACY_IS_BUILT AND NOT EXISTS "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
|
|
message(FATAL_ERROR
|
|
"Selected legacy/default DOS utility missing: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}. "
|
|
"Commit dosutils/netold.exe, enable MARS_NWE_INSTALL_NEW_DOSUTILS, "
|
|
"or enable MARS_NWE_BUILD_DOSUTILS."
|
|
)
|
|
endif()
|
|
|
|
if(NOT MARS_DOSUTILS_SELECTED_NEW_IS_BUILT AND NOT EXISTS "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
|
message(FATAL_ERROR
|
|
"Selected new DOS utility missing: ${MARS_DOSUTILS_SELECTED_NEW_EXE}. "
|
|
"Commit dosutils/net.exe or enable MARS_NWE_BUILD_DOSUTILS."
|
|
)
|
|
endif()
|
|
|
|
message(STATUS "DOS legacy/default utility binary: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
|
|
message(STATUS "DOS new-only utility binary: ${MARS_DOSUTILS_SELECTED_NEW_EXE}")
|
|
|
|
foreach(tool IN LISTS MARS_DOSUTILS_LEGACY_TOOLS)
|
|
if(tool STREQUAL "net")
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
RENAME net.exe)
|
|
else()
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
RENAME "${tool}.exe")
|
|
endif()
|
|
endforeach()
|
|
|
|
foreach(tool IN LISTS MARS_DOSUTILS_NEW_ONLY_TOOLS)
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_NEW_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
RENAME "${tool}.exe")
|
|
endforeach()
|
|
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
|
RENAME login.exe)
|
|
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
|
RENAME map.exe)
|
|
|
|
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
|
|
RENAME slist.exe)
|
|
|
|
if(MAINTAINER_BUILD AND MARS_NWE_BUILD_DOSUTILS)
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dlystrt.exe"
|
|
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
|
|
RENAME dlystrt.exe)
|
|
endif()
|
|
endif()
|