dosutils: match Novell paths for flags and trustees

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.
This commit is contained in:
Mario Fetka
2026-05-28 07:54:41 +02:00
parent 0fa4a6f700
commit 5da600c2a5
23 changed files with 2653 additions and 659 deletions

View File

@@ -1,31 +1,28 @@
@ECHO OFF
REM FDGTSTA.BAT
REM Automated Novell FLAGDIR baseline for MARS NWE.
REM FLAGDIR compare test.
REM
REM Run while already logged in and with F: mapped to SYS.
REM Direct part:
REM OUT = Novell baseline using \NPUBLIC\FLAGDIR
REM PUBOUT = our implementation using \PUBLIC\FLAGDIR
REM
REM Test tree:
REM F:\FDGTEST
REM Result tree:
REM F:\FDGCMP
REM
REM Scope:
REM FLAGDIR on directories only.
REM
REM FLAGDIR uses long option names:
REM Normal
REM System
REM Hidden
REM Deleteinhibit
REM Purge
REM Renameinhibit
REM User-context part:
REM NOPASSUSER logs in via DLYSTRT helper and runs the same effective tests.
IF "%1"=="" GOTO PART1
IF "%1"=="PART2" GOTO PART2
IF "%1"=="part2" GOTO PART2
IF "%1"=="Part2" GOTO PART2
ECHO Usage: FDGTSTA [PART2]
GOTO END
:PART1
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST FDGTEST\NUL DELTREE /Y FDGTEST\*.*
IF EXIST FDGCMP\NUL DELTREE /Y FDGCMP\*.*
IF EXIST FDGTMP\NUL DELTREE /Y FDGTMP\*.*
IF NOT EXIST FDGTEST\NUL MD FDGTEST
IF NOT EXIST FDGTEST\DIRA\NUL MD FDGTEST\DIRA
@@ -34,89 +31,117 @@ IF NOT EXIST FDGTEST\DIRC\NUL MD FDGTEST\DIRC
IF NOT EXIST FDGTEST\DIRB\SUB\NUL MD FDGTEST\DIRB\SUB
IF NOT EXIST FDGCMP\NUL MD FDGCMP
IF NOT EXIST FDGCMP\OUT\NUL MD FDGCMP\OUT
IF NOT EXIST FDGCMP\PUBOUT\NUL MD FDGCMP\PUBOUT
IF NOT EXIST FDGCMP\SETUP\NUL MD FDGCMP\SETUP
IF NOT EXIST FDGCMP\UNOV\NUL MD FDGCMP\UNOV
IF NOT EXIST FDGCMP\UPUB\NUL MD FDGCMP\UPUB
IF EXIST F:\FDGCMP\RUN.LOG DEL F:\FDGCMP\RUN.LOG
IF EXIST F:\FDGCMP\SUMMARY.TXT DEL F:\FDGCMP\SUMMARY.TXT
IF EXIST F:\FDGCMP\COMPARE.LOG DEL F:\FDGCMP\COMPARE.LOG
IF EXIST F:\FDGCMP\UCOMP.LOG DEL F:\FDGCMP\UCOMP.LOG
IF EXIST F:\FDGCMP\FDGTSTA.ZIP DEL F:\FDGCMP\FDGTSTA.ZIP
IF EXIST F:\FDGCMP\ZIP.LOG DEL F:\FDGCMP\ZIP.LOG
IF EXIST F:\FDGCMP\OUT\D01_BASE.OUT DEL F:\FDGCMP\OUT\D01_BASE.OUT
IF EXIST F:\FDGCMP\OUT\D02_SET.OUT DEL F:\FDGCMP\OUT\D02_SET.OUT
IF EXIST F:\FDGCMP\OUT\D03_NDIR.OUT DEL F:\FDGCMP\OUT\D03_NDIR.OUT
IF EXIST F:\FDGCMP\OUT\D04_FILTER.OUT DEL F:\FDGCMP\OUT\D04_FILTER.OUT
IF EXIST F:\FDGCMP\OUT\D05_NORMAL.OUT DEL F:\FDGCMP\OUT\D05_NORMAL.OUT
IF EXIST F:\FDGCMP\OUT\D06_FINAL.OUT DEL F:\FDGCMP\OUT\D06_FINAL.OUT
IF EXIST F:\FDGTEST\DIRB\SUB\SUB.TXT DEL F:\FDGTEST\DIRB\SUB\SUB.TXT
ECHO SUB FILE > F:\FDGTEST\DIRB\SUB\SUB.TXT
ECHO FDGTSTA FLAGDIR compare > F:\FDGCMP\RUN.LOG
ECHO FDGTSTA FLAGDIR baseline > F:\FDGCMP\RUN.LOG
ECHO Run while already logged in. >> F:\FDGCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\FDGCMP\RUN.LOG
ECHO. >> F:\FDGCMP\RUN.LOG
ECHO Starting D10 read normal...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\OUT\D10_READ.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\PUBOUT\D10_READ.OUT
ECHO === D01 FLAGDIR base / reset to Normal === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D01_BASE.OUT
ECHO Starting D11 Hidden...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\OUT\D11_HID.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D11_HID.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > NUL
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\PUBOUT\D11_HID.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\PUBOUT\D11_HID.OUT
ECHO === D02 FLAGDIR set directory flags === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB System >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D02_SET.OUT
ECHO Starting D12 System...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB System > F:\FDGCMP\OUT\D12_SYS.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D12_SYS.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal > NUL
PUBLIC\FLAGDIR F:\FDGTEST\DIRB System > F:\FDGCMP\PUBOUT\D12_SYS.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\PUBOUT\D12_SYS.OUT
ECHO === D03 NDIR directory readback === >> F:\FDGCMP\RUN.LOG
NPUBLIC\NDIR F:\FDGTEST > F:\FDGCMP\OUT\D03_NDIR.OUT
NPUBLIC\NDIR F:\FDGTEST /DO >> F:\FDGCMP\OUT\D03_NDIR.OUT
NPUBLIC\NDIR F:\FDGTEST /RIGHTS >> F:\FDGCMP\OUT\D03_NDIR.OUT
ECHO Starting D13 Purge...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > F:\FDGCMP\OUT\D13_PUR.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D13_PUR.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal > NUL
PUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge > F:\FDGCMP\PUBOUT\D13_PUR.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\PUBOUT\D13_PUR.OUT
ECHO === D04 NDIR filters for directory flags === >> F:\FDGCMP\RUN.LOG
ECHO --- /H --- > F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /H >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO --- /SY --- >> F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /SY >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO --- /NOT H --- >> F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /NOT H >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO Starting D14 Delete/Rename inhibit...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > F:\FDGCMP\OUT\D14_DIRI.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D14_DIRI.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal > NUL
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit > F:\FDGCMP\PUBOUT\D14_DIRI.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\PUBOUT\D14_DIRI.OUT
ECHO === D05 FLAGDIR Normal reset === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D05_NORMAL.OUT
ECHO Starting D15 mixed reset...
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\OUT\D15_NORM.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D15_NORM.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden System > NUL
PUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\PUBOUT\D15_NORM.OUT
PUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\PUBOUT\D15_NORM.OUT
ECHO === D06 final NDIR readback === >> F:\FDGCMP\RUN.LOG
NPUBLIC\NDIR F:\FDGTEST > F:\FDGCMP\OUT\D06_FINAL.OUT
NPUBLIC\NDIR F:\FDGTEST /DO >> F:\FDGCMP\OUT\D06_FINAL.OUT
NPUBLIC\NDIR F:\FDGTEST /RIGHTS >> F:\FDGCMP\OUT\D06_FINAL.OUT
ECHO Starting D90 missing dir...
NPUBLIC\FLAGDIR F:\FDGTEST\MISSING > F:\FDGCMP\OUT\D90_MISS.OUT
PUBLIC\FLAGDIR F:\FDGTEST\MISSING > F:\FDGCMP\PUBOUT\D90_MISS.OUT
ECHO === SUMMARY === > F:\FDGCMP\SUMMARY.TXT
ECHO FDGTSTA FLAGDIR baseline finished. >> F:\FDGCMP\SUMMARY.TXT
ECHO. >> F:\FDGCMP\SUMMARY.TXT
ECHO Expected: >> F:\FDGCMP\SUMMARY.TXT
ECHO - D01 displays base directory flags after Normal reset. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D02 sets Hidden, System, Purge, Deleteinhibit, Renameinhibit. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D03 shows NDIR directory readback. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D04 checks NDIR filters for visible directory flags. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D05 resets all directory flags to Normal. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D06 final readback should show normal directories. >> F:\FDGCMP\SUMMARY.TXT
ECHO Optional pack results with FDGTZIP.BAT. >> F:\FDGCMP\SUMMARY.TXT
ECHO Comparing direct FLAGDIR outputs... > F:\FDGCMP\COMPARE.LOG
FOR %%F IN (D10_READ.OUT D11_HID.OUT D12_SYS.OUT D13_PUR.OUT D14_DIRI.OUT D15_NORM.OUT D90_MISS.OUT) DO FC F:\FDGCMP\OUT\%%F F:\FDGCMP\PUBOUT\%%F >> F:\FDGCMP\COMPARE.LOG
REM Grant NOPASSUSER enough rights for user-context directory flag tests.
NPUBLIC\GRANT ALL FOR F:\FDGTEST TO USER NOPASSUSER > F:\FDGCMP\SETUP\S01_GRD.OUT
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRA TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRB TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRC TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
NPUBLIC\GRANT ALL FOR F:\FDGTEST\DIRB\SUB TO USER NOPASSUSER >> F:\FDGCMP\SETUP\S01_GRD.OUT
IF "%LGNTPWD%"=="" GOTO NEEDPWD
IF EXIST C:\FDGTMP DELTREE /Y C:\FDGTMP > NUL
MD C:\FDGTMP
MD C:\FDGTMP\UNOV
MD C:\FDGTMP\UPUB
COPY F:\FDGC.BAT C:\FDGTMP\FDGC.BAT > NUL
COPY F:\PUBLIC\DLYSTRT.EXE C:\FDGTMP\DLYSTRT.EXE > NUL
C:
CD \FDGTMP
DLYSTRT /T:2 FDGC.BAT
GOTO END
:NEEDPWD
ECHO LGNTPWD is not set. User-context FLAGDIR block skipped. >> F:\FDGCMP\RUN.LOG
ECHO.
ECHO FDGTSTA fertig.
ECHO Ergebnisse liegen in F:\FDGCMP
ECHO Optional: FDGTZIP ausfuehren.
ECHO LGNTPWD ist nicht gesetzt. User-Kontext wurde nicht gestartet.
GOTO END
:PART2
F:
CD \
IF NOT EXIST FDGCMP\UNOV\NUL MD FDGCMP\UNOV
IF NOT EXIST FDGCMP\UPUB\NUL MD FDGCMP\UPUB
IF EXIST F:\FDGCMP\UCOMP.LOG DEL F:\FDGCMP\UCOMP.LOG
COPY C:\FDGTMP\UNOV\*.OUT F:\FDGCMP\UNOV > NUL
COPY C:\FDGTMP\UPUB\*.OUT F:\FDGCMP\UPUB > NUL
IF EXIST C:\FDGTMP\HELPER.TXT COPY C:\FDGTMP\HELPER.TXT F:\FDGCMP > NUL
ECHO Comparing NOPASSUSER FLAGDIR outputs... > F:\FDGCMP\UCOMP.LOG
FOR %%F IN (U10_READ.OUT U11_HID.OUT U12_SYS.OUT U13_PUR.OUT U14_DIRI.OUT U15_NORM.OUT U90_MISS.OUT) DO FC F:\FDGCMP\UNOV\%%F F:\FDGCMP\UPUB\%%F >> F:\FDGCMP\UCOMP.LOG
ECHO FDGTSTA summary > F:\FDGCMP\SUMMARY.TXT
ECHO Direct compare: F:\FDGCMP\COMPARE.LOG >> F:\FDGCMP\SUMMARY.TXT
ECHO User compare: F:\FDGCMP\UCOMP.LOG >> F:\FDGCMP\SUMMARY.TXT
ECHO Optional: FDGTZIP ausfuehren. >> F:\FDGCMP\SUMMARY.TXT
ECHO.
ECHO FDGTSTA PART2 fertig. Optional FDGTZIP ausfuehren.
GOTO END
:END