- add GRANT as a new multi-call DOS utility - implement Client32 NCP87 trustee-add helper - resolve USER and GROUP bindery objects before granting rights - support Novell-style rights lists, including ALL and N - support directory trustee grants - support file trustee grants via /FILES - implement recursive grants via /SUBDIRECTORIES - accept /SUBDIRS as a compatibility alias - format GRANT success output close to Novell GRANT - add GRANT comparison scripts for normal and recursive test cases
201 lines
6.2 KiB
CMake
201 lines
6.2 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.
|
|
|
|
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
|
|
)
|
|
|
|
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
|
|
flag.c
|
|
flagdir.c
|
|
rights.c
|
|
grant.c
|
|
c32ncp.c
|
|
nwcrypt.c
|
|
nwdebug.c
|
|
nwtests.c
|
|
capture.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}")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${obj}"
|
|
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
|
|
"${OPENWATCOM_WCL}"
|
|
-q
|
|
-zq
|
|
-bt=dos
|
|
-ml
|
|
-0
|
|
-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")
|
|
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()
|
|
|
|
if(MARS_NWE_INSTALL_DOSUTILS)
|
|
if(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 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)
|
|
endif()
|