# CREATOR / xattr automated test

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

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`.

For the full test, including the `NOPASSUSER` readback, set the Supervisor
password first:

```text
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:

```sh
sudo ./cix_collect_xattr.sh
```

Finally package the DOS-side result tree:

```text
F:\CIXZIP
```

Result ZIP:

```text
F:\CIXCMP\CIXSTA.ZIP
```

Linux package with server log:

```sh
sudo ./mars_packtest_v3.sh cixsta 5 mario
```

## What CIXSTA does

```text
S_SUP.TXT:
  PUBLIC\CREATOR ... /CREATOR MARIO
  PUBLIC\CREATOR ... /MODIFIER MARIO
  Expected xattr: user.mars_nwe.fileinfo

S_ARCH.TXT:
  PUBLIC\CREATOR ... /ARCHIVE MARIO
  Expected xattr: user.mars_nwe.archive

S_ALL.TXT:
  PUBLIC\CREATOR ... /ALL MARIO 2026-05-25 16:12:00
  Expected xattrs: user.mars_nwe.fileinfo and user.mars_nwe.archive
```

The scripts also grant `NOPASSUSER` read/file-scan rights and collect readback
output as that user:

```text
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
```
