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:
71
test/creator/CIXC.BAT
Normal file
71
test/creator/CIXC.BAT
Normal file
@@ -0,0 +1,71 @@
|
||||
@ECHO OFF
|
||||
REM CIXC.BAT - delayed user-context CREATOR readback helper.
|
||||
REM Started by CIXSTA via DLYSTRT. Runs from C:\CIXTMP.
|
||||
|
||||
C:
|
||||
CD \CIXTMP
|
||||
|
||||
ECHO CIXC user-context CREATOR readback helper > HELPER.TXT
|
||||
ECHO Current phase: logout supervisor, login NOPASSUSER. >> HELPER.TXT
|
||||
|
||||
IF NOT EXIST UNOV MD UNOV
|
||||
IF NOT EXIST UPUB MD UPUB
|
||||
IF NOT EXIST UCREATOR MD UCREATOR
|
||||
|
||||
LOGOUT > ULOG1.OUT
|
||||
LOGIN NOPASSUSER > ULOGIN.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \PUBLIC\CREATOR.EXE GOTO HAVEF
|
||||
ECHO F: not ready after NOPASSUSER login. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO RELSUP
|
||||
|
||||
:HAVEF
|
||||
ECHO Capturing NOPASSUSER RIGHTS readback... >> C:\CIXTMP\HELPER.TXT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP > C:\CIXTMP\UNOV\SUPRGT.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP > C:\CIXTMP\UPUB\SUPRGT.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_SUP.TXT > C:\CIXTMP\UNOV\RSUP.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_SUP.TXT > C:\CIXTMP\UPUB\RSUP.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_ARCH.TXT > C:\CIXTMP\UNOV\RARCH.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_ARCH.TXT > C:\CIXTMP\UPUB\RARCH.OUT
|
||||
\NPUBLIC\RIGHTS F:\CIXTEST\SUP\S_ALL.TXT > C:\CIXTMP\UNOV\RALL.OUT
|
||||
\PUBLIC\RIGHTS F:\CIXTEST\SUP\S_ALL.TXT > C:\CIXTMP\UPUB\RALL.OUT
|
||||
|
||||
ECHO Capturing PUBLIC\CREATOR /SHOW as NOPASSUSER... >> C:\CIXTMP\HELPER.TXT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > C:\CIXTMP\UCREATOR\CSUP.OUT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > C:\CIXTMP\UCREATOR\CARCH.OUT
|
||||
\PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > C:\CIXTMP\UCREATOR\CALL.OUT
|
||||
|
||||
:RELSUP
|
||||
ECHO Relogin as SUPERVISOR. >> C:\CIXTMP\HELPER.TXT
|
||||
C:
|
||||
CD \CIXTMP
|
||||
LOGOUT > ULOG2.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST \LOGIN\LOGIN.EXE GOTO HAVELOG
|
||||
ECHO F:\LOGIN\LOGIN.EXE not found. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:HAVELOG
|
||||
F:\LOGIN\LOGIN SUPERVISOR /PWD:%LGNTPWD% > C:\CIXTMP\ULGSUP.OUT
|
||||
|
||||
F:
|
||||
CD \
|
||||
IF EXIST F:\CIXSTA.BAT GOTO QUEUEP2
|
||||
ECHO F:\CIXSTA.BAT missing after SUPERVISOR login. >> C:\CIXTMP\HELPER.TXT
|
||||
GOTO MANUAL
|
||||
|
||||
:QUEUEP2
|
||||
C:\CIXTMP\DLYSTRT /T:2 F:\CIXSTA.BAT PART2
|
||||
GOTO END
|
||||
|
||||
:MANUAL
|
||||
ECHO Please run manually after SUPERVISOR login: >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO F: >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO CD \ >> C:\CIXTMP\HELPER.TXT
|
||||
ECHO CIXSTA PART2 >> C:\CIXTMP\HELPER.TXT
|
||||
|
||||
:END
|
||||
@@ -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
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
@ECHO OFF
|
||||
REM CIXZIP.BAT
|
||||
REM Optional packer for CIXSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \CIXCMP
|
||||
|
||||
IF EXIST CIXSTA.ZIP DEL CIXSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating CIXSTA.ZIP > ZIP.LOG
|
||||
ZIP -r CIXSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST LINUX >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \CIXTEST\NUL DELTREE /Y \CIXTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\CIXCMP\CIXSTA.ZIP
|
||||
ECHO F:\CIXCMP\ZIP.LOG
|
||||
ECHO.
|
||||
@ECHO OFF
|
||||
REM CIXZIP.BAT
|
||||
REM Optional packer for CIXSTA result files.
|
||||
REM Requires ZIP.EXE in PATH or current directory.
|
||||
|
||||
F:
|
||||
CD \CIXCMP
|
||||
|
||||
IF EXIST CIXSTA.ZIP DEL CIXSTA.ZIP
|
||||
IF EXIST ZIP.LOG DEL ZIP.LOG
|
||||
|
||||
ECHO Creating CIXSTA.ZIP > ZIP.LOG
|
||||
ZIP -r CIXSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST LINUX UNOV UPUB UCREATOR UCOMP.LOG HELPER.TXT ULOG1.OUT ULOGIN.OUT ULOG2.OUT ULGSUP.OUT >> ZIP.LOG
|
||||
|
||||
|
||||
REM Cleanup generated test directories after ZIP.
|
||||
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
|
||||
ECHO Cleaning generated test directories... >> ZIP.LOG
|
||||
IF EXIST \CIXTEST\NUL DELTREE /Y \CIXTEST >> ZIP.LOG
|
||||
CD \
|
||||
ECHO.
|
||||
ECHO ZIP step finished.
|
||||
ECHO Check:
|
||||
ECHO F:\CIXCMP\CIXSTA.ZIP
|
||||
ECHO F:\CIXCMP\ZIP.LOG
|
||||
ECHO.
|
||||
|
||||
@@ -1,18 +1,83 @@
|
||||
# CREATOR / xattr automated test
|
||||
|
||||
This replaces the old FILER/manual creator-xattr test with a direct test using
|
||||
`PUBLIC\CREATOR.EXE`.
|
||||
This test validates `PUBLIC\CREATOR.EXE` against the MARS-NWE file metadata
|
||||
stored in Linux extended attributes. It also performs an optional readback as
|
||||
`NOPASSUSER`, so the generated metadata and effective rights can be checked from
|
||||
a normal-user context.
|
||||
|
||||
## Requirements
|
||||
|
||||
`PUBLIC\CREATOR.EXE` from the new dosutils tree must be installed.
|
||||
Install the current DOS tools into the normal test locations:
|
||||
|
||||
```text
|
||||
SYS:PUBLIC\CREATOR.EXE
|
||||
SYS:PUBLIC\RIGHTS.EXE
|
||||
SYS:PUBLIC\DLYSTRT.EXE
|
||||
SYS:NPUBLIC\NDIR.EXE
|
||||
SYS:NPUBLIC\RIGHTS.EXE
|
||||
SYS:NPUBLIC\FLAG.EXE
|
||||
SYS:NPUBLIC\GRANT.EXE
|
||||
```
|
||||
|
||||
For the Linux collector install the `attr` package, so `getfattr` is available.
|
||||
|
||||
The optional user-context phase expects these accounts to exist:
|
||||
|
||||
```text
|
||||
SUPERVISOR
|
||||
NOPASSUSER
|
||||
MARIO
|
||||
```
|
||||
|
||||
`MARIO` is used as the creator/modifier/archiver object name in the test data.
|
||||
|
||||
## Files used by the test
|
||||
|
||||
All DOS scripts are expected at the root of `F:`:
|
||||
|
||||
```text
|
||||
F:\CIXSTA.BAT
|
||||
F:\CIXC.BAT
|
||||
F:\CIXZIP.BAT
|
||||
```
|
||||
|
||||
`CIXC.BAT` and `DLYSTRT.EXE` are copied to `C:\CIXTMP` before the delayed
|
||||
logout/login helper is started. `CIXSTA.BAT` stays on `F:` and is run again as
|
||||
`F:\CIXSTA.BAT PART2` after the helper has logged `SUPERVISOR` back in.
|
||||
|
||||
Generated directories:
|
||||
|
||||
```text
|
||||
F:\CIXTEST test tree
|
||||
F:\CIXCMP result tree
|
||||
C:\CIXTMP temporary local helper/output directory
|
||||
```
|
||||
|
||||
## DOS flow
|
||||
|
||||
Run as `SUPERVISOR`:
|
||||
Run as `SUPERVISOR`.
|
||||
|
||||
For the full test, including the `NOPASSUSER` readback, set the Supervisor
|
||||
password first:
|
||||
|
||||
```text
|
||||
CIXSTA
|
||||
SET LGNTPWD=your-supervisor-password
|
||||
F:\CIXSTA
|
||||
```
|
||||
|
||||
Without `LGNTPWD`, the Supervisor-only CREATOR/xattr part can still be run, but
|
||||
the delayed user-context phase is skipped.
|
||||
|
||||
When the delayed helper finishes, it starts:
|
||||
|
||||
```text
|
||||
F:\CIXSTA PART2
|
||||
```
|
||||
|
||||
Wait until the screen shows:
|
||||
|
||||
```text
|
||||
CIXSTA PART2 fertig.
|
||||
```
|
||||
|
||||
Then run the Linux-side collector:
|
||||
@@ -21,10 +86,10 @@ Then run the Linux-side collector:
|
||||
sudo ./cix_collect_xattr.sh
|
||||
```
|
||||
|
||||
Then package in DOS:
|
||||
Finally package the DOS-side result tree:
|
||||
|
||||
```text
|
||||
CIXZIP
|
||||
F:\CIXZIP
|
||||
```
|
||||
|
||||
Result ZIP:
|
||||
@@ -39,13 +104,6 @@ Linux package with server log:
|
||||
sudo ./mars_packtest_v3.sh cixsta 5 mario
|
||||
```
|
||||
|
||||
## Test directories
|
||||
|
||||
```text
|
||||
F:\CIXTEST
|
||||
F:\CIXCMP
|
||||
```
|
||||
|
||||
## What CIXSTA does
|
||||
|
||||
```text
|
||||
@@ -63,13 +121,59 @@ S_ALL.TXT:
|
||||
Expected xattrs: user.mars_nwe.fileinfo and user.mars_nwe.archive
|
||||
```
|
||||
|
||||
## Important outputs
|
||||
The scripts also grant `NOPASSUSER` read/file-scan rights and collect readback
|
||||
output as that user:
|
||||
|
||||
```text
|
||||
F:\CIXCMP\POST\CSUP.OUT
|
||||
F:\CIXCMP\POST\CARCH.OUT
|
||||
F:\CIXCMP\POST\CALL.OUT
|
||||
F:\CIXCMP\POST\SUPDAT.OUT
|
||||
F:\CIXCMP\LINUX\getfattr.txt
|
||||
F:\CIXCMP\LINUX\xattr_focus.txt
|
||||
UNOV\*.OUT NPUBLIC\RIGHTS readback as NOPASSUSER
|
||||
UPUB\*.OUT PUBLIC\RIGHTS readback as NOPASSUSER
|
||||
UCREATOR\*.OUT PUBLIC\CREATOR /SHOW readback as NOPASSUSER
|
||||
UCOMP.LOG FC comparison of UNOV vs UPUB
|
||||
HELPER.TXT delayed helper phase log
|
||||
```
|
||||
|
||||
## Important DOS outputs
|
||||
|
||||
```text
|
||||
F:\CIXCMP\RUN.LOG
|
||||
F:\CIXCMP\SUMMARY.TXT
|
||||
F:\CIXCMP\PRE\*.OUT
|
||||
F:\CIXCMP\POST\*.OUT
|
||||
F:\CIXCMP\UNOV\*.OUT
|
||||
F:\CIXCMP\UPUB\*.OUT
|
||||
F:\CIXCMP\UCREATOR\*.OUT
|
||||
F:\CIXCMP\UCOMP.LOG
|
||||
F:\CIXCMP\HELPER.TXT
|
||||
```
|
||||
|
||||
## Important Linux outputs
|
||||
|
||||
The collector writes DOS/ZIP-safe 8.3 file names under `F:\CIXCMP\LINUX`
|
||||
(`/var/mars_nwe/SYS/CIXCMP/LINUX` on Linux):
|
||||
|
||||
```text
|
||||
collecto.txt collector metadata
|
||||
files.txt enumerated files/directories
|
||||
stat.txt Linux stat information
|
||||
xattr_na.txt xattr names only
|
||||
getfattr.txt full xattr dump with hex values
|
||||
xattr_fo.txt filtered mars/nwe/netware/creator/archive-related xattrs
|
||||
```
|
||||
|
||||
The expected interesting xattrs are:
|
||||
|
||||
```text
|
||||
user.mars_nwe.fileinfo
|
||||
user.mars_nwe.archive
|
||||
```
|
||||
|
||||
## Expected good result
|
||||
|
||||
A good run has:
|
||||
|
||||
```text
|
||||
UCOMP.LOG: all FC comparisons report no differences
|
||||
UCREATOR\*.OUT: CREATOR /SHOW prints readable Attributes and Rights mask
|
||||
LINUX\getfattr.txt: S_SUP.TXT has fileinfo, S_ARCH.TXT has archive,
|
||||
S_ALL.TXT has both fileinfo and archive
|
||||
```
|
||||
|
||||
69
test/creator/cix_collect_xattr.sh
Normal file → Executable file
69
test/creator/cix_collect_xattr.sh
Normal file → Executable file
@@ -4,61 +4,82 @@
|
||||
#
|
||||
# Linux-side collector for the CIXSTA CREATOR/xattr test.
|
||||
#
|
||||
# Run as root after CIXSTA.BAT and before CIXZIP.BAT:
|
||||
# Run as root after CIXSTA.BAT/PART2 and before CIXZIP.BAT:
|
||||
# sudo ./cix_collect_xattr.sh
|
||||
#
|
||||
# The output names intentionally use DOS/ZIP-safe 8.3 names because the
|
||||
# DOS-side ZIP step may truncate long names in F:\CIXCMP\LINUX.
|
||||
#
|
||||
|
||||
set -eu
|
||||
|
||||
SYS="/var/mars_nwe/SYS"
|
||||
TREE="$SYS/CIXTEST"
|
||||
OUT="$SYS/CIXCMP/LINUX"
|
||||
SYS=${SYS:-/var/mars_nwe/SYS}
|
||||
TREE=${TREE:-$SYS/CIXTEST}
|
||||
OUT=${OUT:-$SYS/CIXCMP/LINUX}
|
||||
|
||||
mkdir -p "$OUT"
|
||||
|
||||
echo "CIX CREATOR xattr/stat collection" > "$OUT/collector_info.txt"
|
||||
echo "Created: $(date)" >> "$OUT/collector_info.txt"
|
||||
echo "Tree: $TREE" >> "$OUT/collector_info.txt"
|
||||
echo >> "$OUT/collector_info.txt"
|
||||
INFO="$OUT/collecto.txt"
|
||||
FILES="$OUT/files.txt"
|
||||
STAT="$OUT/stat.txt"
|
||||
XATTR_NAMES="$OUT/xattr_na.txt"
|
||||
GETFATTR="$OUT/getfattr.txt"
|
||||
XATTR_FOCUS="$OUT/xattr_fo.txt"
|
||||
|
||||
{
|
||||
echo "CIX CREATOR xattr/stat collection"
|
||||
echo "Created: $(date)"
|
||||
echo "Tree: $TREE"
|
||||
echo "Output: $OUT"
|
||||
echo
|
||||
} > "$INFO"
|
||||
|
||||
if ! command -v getfattr >/dev/null 2>&1; then
|
||||
echo "ERROR: getfattr not installed. Install attr package." | tee "$OUT/getfattr_missing.txt"
|
||||
echo "ERROR: getfattr not installed. Install the attr package." | tee "$OUT/getfattr_missing.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find "$TREE" -xdev -print | sort > "$OUT/files.txt"
|
||||
if [ ! -d "$TREE" ]; then
|
||||
echo "ERROR: test tree not found: $TREE" | tee "$OUT/tree_missing.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find "$TREE" -xdev -print | sort > "$FILES"
|
||||
|
||||
{
|
||||
echo "path|uid|gid|mode|size|mtime|ctime|atime"
|
||||
while IFS= read -r p; do
|
||||
stat -c '%n|%u|%g|%a|%s|%y|%z|%x' "$p"
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/stat.txt"
|
||||
done < "$FILES"
|
||||
} > "$STAT"
|
||||
|
||||
{
|
||||
while IFS= read -r p; do
|
||||
echo "### $p"
|
||||
getfattr -m - --absolute-names "$p" 2>/dev/null || true
|
||||
echo
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/xattr_names.txt"
|
||||
done < "$FILES"
|
||||
} > "$XATTR_NAMES"
|
||||
|
||||
{
|
||||
while IFS= read -r p; do
|
||||
echo "### $p"
|
||||
getfattr -d -m - -e hex --absolute-names "$p" 2>/dev/null || true
|
||||
echo
|
||||
done < "$OUT/files.txt"
|
||||
} > "$OUT/getfattr.txt"
|
||||
done < "$FILES"
|
||||
} > "$GETFATTR"
|
||||
|
||||
grep -iE 'mars|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr|nwe' "$OUT/getfattr.txt" > "$OUT/xattr_focus.txt" || true
|
||||
grep -iE 'mars|nwe|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr' \
|
||||
"$GETFATTR" > "$XATTR_FOCUS" || true
|
||||
|
||||
chmod -R a+r "$OUT"
|
||||
|
||||
echo "Wrote:"
|
||||
echo " $OUT/collector_info.txt"
|
||||
echo " $OUT/files.txt"
|
||||
echo " $OUT/stat.txt"
|
||||
echo " $OUT/xattr_names.txt"
|
||||
echo " $OUT/getfattr.txt"
|
||||
echo " $OUT/xattr_focus.txt"
|
||||
cat <<EOF2
|
||||
Wrote:
|
||||
$INFO
|
||||
$FILES
|
||||
$STAT
|
||||
$XATTR_NAMES
|
||||
$GETFATTR
|
||||
$XATTR_FOCUS
|
||||
EOF2
|
||||
|
||||
Reference in New Issue
Block a user