dosutils: align Novell-compatible tests and stage NCOPY work

Update the DOS utilities and test suite with the current Novell comparison
state.

Validated/updated tool behavior:
- improve CREATOR output by showing Novell-style attribute and rights masks
- extend FLAGDIR handling with old NCP22 directory attribute read/write
  fallback paths
- expand NDIR Novell-style formatting, filtering, /SUB handling, date output,
  DI/RI attribute display and richer metadata collection
- adjust REVOKE output/grammar, recursive /SUBDIRECTORIES behavior and trustee
  update/delete paths to better match Novell tools
- adjust SLIST header/output behavior for logged-in and logged-out cases
- update README status to reflect the currently green/tested tools

Test-suite changes:
- add/refresh Novell comparison tests for CREATOR, NDIR, REVOKE and SLIST
- update NCOPY tests and collection scripts for the current investigation state
- refresh per-tool README files and top-level test documentation
- keep MAP documented as still separately open

NCOPY:
- add the current NCOPY implementation and experimental NCP74/server-side-copy
  scaffolding
- build ncopy.c so it stays compile-tested
- keep NCOPY disabled in the NET multicall dispatch for now because the
  server-side-copy/open-handle path is still unsafe and needs further analysis

Build:
- include ncopy.c in the DOS utility build
- drop the temporary MARS_DOSUTILS_VERSION define wiring from CMake
This commit is contained in:
Mario Fetka
2026-05-29 07:40:04 +02:00
parent 5da600c2a5
commit 4a952b4c4c
36 changed files with 5873 additions and 943 deletions

View File

@@ -2,16 +2,21 @@
REM CIXSTA.BAT
REM Automated CREATOR/xattr test for MARS NWE.
REM
REM Uses PUBLIC\CREATOR.EXE to set creator/modifier/archive metadata through
REM the same NCP22/25 Set Directory/File Information path as FILER.
REM PART1 runs as SUPERVISOR, prepares data and queues CIXC via DLYSTRT.
REM PART2 runs after CIXC has logged SUPERVISOR back in and collects results
REM from C:\CIXTMP into F:\CIXCMP.
REM
REM Run as SUPERVISOR.
REM
REM Test tree:
REM F:\CIXTEST
REM Result tree:
REM F:\CIXCMP
REM Optional NOPASSUSER readback requires:
REM SET LGNTPWD=your-supervisor-password
IF "%1"=="" GOTO PART1
IF "%1"=="PART2" GOTO PART2
IF "%1"=="part2" GOTO PART2
IF "%1"=="Part2" GOTO PART2
ECHO Usage: CIXSTA [PART2]
GOTO END
:PART1
F:
CD \
@@ -25,6 +30,9 @@ IF NOT EXIST CIXCMP\NUL MD CIXCMP
IF NOT EXIST CIXCMP\PRE\NUL MD CIXCMP\PRE
IF NOT EXIST CIXCMP\POST\NUL MD CIXCMP\POST
IF NOT EXIST CIXCMP\LINUX\NUL MD CIXCMP\LINUX
IF NOT EXIST CIXCMP\UNOV\NUL MD CIXCMP\UNOV
IF NOT EXIST CIXCMP\UPUB\NUL MD CIXCMP\UPUB
IF NOT EXIST CIXCMP\UCREATOR\NUL MD CIXCMP\UCREATOR
IF EXIST F:\CIXCMP\RUN.LOG DEL F:\CIXCMP\RUN.LOG
IF EXIST F:\CIXCMP\SUMMARY.TXT DEL F:\CIXCMP\SUMMARY.TXT
@@ -34,6 +42,15 @@ IF EXIST F:\CIXCMP\ZIP.LOG DEL F:\CIXCMP\ZIP.LOG
IF EXIST F:\CIXCMP\PRE\*.OUT DEL F:\CIXCMP\PRE\*.OUT
IF EXIST F:\CIXCMP\POST\*.OUT DEL F:\CIXCMP\POST\*.OUT
IF EXIST F:\CIXCMP\LINUX\*.TXT DEL F:\CIXCMP\LINUX\*.TXT
IF EXIST F:\CIXCMP\UNOV\*.OUT DEL F:\CIXCMP\UNOV\*.OUT
IF EXIST F:\CIXCMP\UPUB\*.OUT DEL F:\CIXCMP\UPUB\*.OUT
IF EXIST F:\CIXCMP\UCREATOR\*.OUT DEL F:\CIXCMP\UCREATOR\*.OUT
IF EXIST F:\CIXCMP\UCOMP.LOG DEL F:\CIXCMP\UCOMP.LOG
IF EXIST F:\CIXCMP\HELPER.TXT DEL F:\CIXCMP\HELPER.TXT
IF EXIST F:\CIXCMP\ULOG1.OUT DEL F:\CIXCMP\ULOG1.OUT
IF EXIST F:\CIXCMP\ULOGIN.OUT DEL F:\CIXCMP\ULOGIN.OUT
IF EXIST F:\CIXCMP\ULOG2.OUT DEL F:\CIXCMP\ULOG2.OUT
IF EXIST F:\CIXCMP\ULGSUP.OUT DEL F:\CIXCMP\ULGSUP.OUT
REM Reset files from previous runs.
IF EXIST F:\CIXTEST\SUP\S_SUP.TXT DEL F:\CIXTEST\SUP\S_SUP.TXT
@@ -43,6 +60,7 @@ IF EXIST F:\CIXTEST\SUP\S_ALL.TXT DEL F:\CIXTEST\SUP\S_ALL.TXT
ECHO CIXSTA creator/xattr test using PUBLIC\CREATOR > F:\CIXCMP\RUN.LOG
ECHO Run this as SUPERVISOR. >> F:\CIXCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\CIXCMP\RUN.LOG
ECHO Optional user-context target: NOPASSUSER >> F:\CIXCMP\RUN.LOG
ECHO. >> F:\CIXCMP\RUN.LOG
ECHO SUP CREATOR FILE > F:\CIXTEST\SUP\S_SUP.TXT
@@ -83,6 +101,68 @@ NPUBLIC\FLAG F:\CIXTEST\SUP\S_SUP.TXT > F:\CIXCMP\POST\FSUP.OUT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ARCH.TXT > F:\CIXCMP\POST\FARCH.OUT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ALL.TXT > F:\CIXCMP\POST\FALL.OUT
REM Allow NOPASSUSER to read this tree for optional user-context readback.
REM Creator metadata is set by SUPERVISOR above; the helper only verifies
REM that /SHOW and effective rights look sane for a normal user.
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP TO USER NOPASSUSER > F:\CIXCMP\POST\UGRANTD.OUT
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_SUP.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTS.OUT
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_ARCH.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTA.OUT
\NPUBLIC\GRANT R F FOR F:\CIXTEST\SUP\S_ALL.TXT TO USER NOPASSUSER > F:\CIXCMP\POST\UGRNTL.OUT
REM --- Queue delayed NOPASSUSER readback helper. ---
IF "%LGNTPWD%"=="" GOTO NEEDPWD
IF EXIST C:\CIXTMP\*.* DELTREE /Y C:\CIXTMP
IF NOT EXIST C:\CIXTMP MD C:\CIXTMP
IF NOT EXIST C:\CIXTMP\UNOV MD C:\CIXTMP\UNOV
IF NOT EXIST C:\CIXTMP\UPUB MD C:\CIXTMP\UPUB
IF NOT EXIST C:\CIXTMP\UCREATOR MD C:\CIXTMP\UCREATOR
REM DLYSTRT must be local because F: disappears after LOGOUT.
IF EXIST \PUBLIC\DLYSTRT.EXE COPY \PUBLIC\DLYSTRT.EXE C:\CIXTMP > NUL
IF EXIST C:\CIXTMP\DLYSTRT.EXE GOTO HAVEDLY
ECHO ERROR: DLYSTRT.EXE not found. >> F:\CIXCMP\RUN.LOG
ECHO ERROR: DLYSTRT.EXE not found.
GOTO END
:HAVEDLY
REM Only the helper and DLYSTRT must be local. CIXSTA stays on F:\ and is
REM started as F:\CIXSTA.BAT PART2 after the SUPERVISOR re-login.
COPY F:\CIXC.BAT C:\CIXTMP\CIXC.BAT > NUL
C:
CD \CIXTMP
DLYSTRT /T:2 CIXC.BAT
ECHO CIXC queued via DLYSTRT. >> F:\CIXCMP\RUN.LOG
ECHO CIXC wurde via DLYSTRT gestartet.
ECHO Nach automatischem Re-Login wird CIXSTA PART2 gestartet.
GOTO END
:PART2
F:
CD \
IF NOT EXIST CIXCMP\UNOV MD CIXCMP\UNOV
IF NOT EXIST CIXCMP\UPUB MD CIXCMP\UPUB
IF NOT EXIST CIXCMP\UCREATOR MD CIXCMP\UCREATOR
IF EXIST C:\CIXTMP\UNOV\*.* COPY C:\CIXTMP\UNOV\*.* F:\CIXCMP\UNOV > NUL
IF EXIST C:\CIXTMP\UPUB\*.* COPY C:\CIXTMP\UPUB\*.* F:\CIXCMP\UPUB > NUL
IF EXIST C:\CIXTMP\UCREATOR\*.* COPY C:\CIXTMP\UCREATOR\*.* F:\CIXCMP\UCREATOR > NUL
IF EXIST C:\CIXTMP\HELPER.TXT COPY C:\CIXTMP\HELPER.TXT F:\CIXCMP\HELPER.TXT > NUL
IF EXIST C:\CIXTMP\ULOG1.OUT COPY C:\CIXTMP\ULOG1.OUT F:\CIXCMP\ULOG1.OUT > NUL
IF EXIST C:\CIXTMP\ULOGIN.OUT COPY C:\CIXTMP\ULOGIN.OUT F:\CIXCMP\ULOGIN.OUT > NUL
IF EXIST C:\CIXTMP\ULOG2.OUT COPY C:\CIXTMP\ULOG2.OUT F:\CIXCMP\ULOG2.OUT > NUL
IF EXIST C:\CIXTMP\ULGSUP.OUT COPY C:\CIXTMP\ULGSUP.OUT F:\CIXCMP\ULGSUP.OUT > NUL
ECHO === COMPARE NOPASSUSER NOVELL RIGHTS AGAINST PUBLIC RIGHTS === > F:\CIXCMP\UCOMP.LOG
ECHO Comparing SUP directory >> F:\CIXCMP\UCOMP.LOG
FC F:\CIXCMP\UNOV\SUPRGT.OUT F:\CIXCMP\UPUB\SUPRGT.OUT >> F:\CIXCMP\UCOMP.LOG
ECHO Comparing S_SUP.TXT >> F:\CIXCMP\UCOMP.LOG
FC F:\CIXCMP\UNOV\RSUP.OUT F:\CIXCMP\UPUB\RSUP.OUT >> F:\CIXCMP\UCOMP.LOG
ECHO Comparing S_ARCH.TXT >> F:\CIXCMP\UCOMP.LOG
FC F:\CIXCMP\UNOV\RARCH.OUT F:\CIXCMP\UPUB\RARCH.OUT >> F:\CIXCMP\UCOMP.LOG
ECHO Comparing S_ALL.TXT >> F:\CIXCMP\UCOMP.LOG
FC F:\CIXCMP\UNOV\RALL.OUT F:\CIXCMP\UPUB\RALL.OUT >> F:\CIXCMP\UCOMP.LOG
ECHO === SUMMARY === > F:\CIXCMP\SUMMARY.TXT
ECHO CIXSTA creator/xattr test with PUBLIC\CREATOR finished. >> F:\CIXCMP\SUMMARY.TXT
ECHO. >> F:\CIXCMP\SUMMARY.TXT
@@ -92,10 +172,23 @@ ECHO - S_ARCH.TXT has archive date/time/archiver MARIO via user.mars_nwe.archive
ECHO - S_ALL.TXT has fileinfo and archive metadata with explicit date/time. >> F:\CIXCMP\SUMMARY.TXT
ECHO - POST\C*.OUT shows PUBLIC\CREATOR /SHOW readback. >> F:\CIXCMP\SUMMARY.TXT
ECHO - POST\SUPDAT.OUT shows NDIR /DATES readback. >> F:\CIXCMP\SUMMARY.TXT
ECHO - UCREATOR/UNOV/UPUB show NOPASSUSER readback. >> F:\CIXCMP\SUMMARY.TXT
ECHO. >> F:\CIXCMP\SUMMARY.TXT
ECHO Next Linux-side step: run cix_collect_xattr.sh, then CIXZIP. >> F:\CIXCMP\SUMMARY.TXT
ECHO.
ECHO CIXSTA fertig.
ECHO CIXSTA PART2 fertig.
ECHO Jetzt auf Linux cix_collect_xattr.sh ausfuehren, dann CIXZIP.
ECHO.
GOTO END
:NEEDPWD
ECHO ERROR: LGNTPWD ist nicht gesetzt.
ECHO Fuer den automatischen CREATOR/NOPASSUSER-Test zuerst setzen, z.B.:
ECHO SET LGNTPWD=dein-supervisor-passwort
ECHO Danach starten:
ECHO F:\CIXSTA
ECHO Es wurde kein DLYSTRT installiert und kein User-Kontext-Test gestartet.
GOTO END
:END