13 KiB
TODO
This file is the project backlog, not a changelog. Keep patch chronology and
handoff details in AI.md. Keep broad architecture prose in REDESIGN.md.
This file should answer: what remains to be done, why it matters, and where the
work belongs.
Implementation dashboard
| Area | Priority | Status | Notes |
|---|---|---|---|
| DOS namespace compatibility | P0 | Active next | Legal names, wildcard semantics, case folding, reserved names and stable 8.3 aliases. |
| Salvage metadata / backup-tool compatibility | P0 | Planned next | Keep .recycle payloads; add NSS-shaped metadata/xattr export for salvaged entries. |
| NetWare 3.x NCP endpoint completion | P1 | Active audit + implementation | ENDPOINTS.md is the detailed decimal/hex audit table; keep this TODO as the short implementation queue. |
| NetWare 4.x endpoint compatibility | P2 | Partial / guarded | ENDPOINTS.md tracks active compatibility vs guarded 4.x selectors. |
| Admin, queues, printing and TTS | P2 | Ongoing | Console-operator model, queue path case handling, print/TTS compatibility cleanup. |
| Test infrastructure | P1 | Ongoing | CTest where offline, live all-smokes where server/client state is required, DOS tool smokes. |
| Shared library layering | P2 | Planned cleanup | Move reusable metadata/salvage builders into libnwcore/libnwfs without importing NSS runtime subsystems. |
| Quota architecture | Done | Stabilized | All-quota live smoke and DOS quota smoke cover QUOTA and SYS backends. |
NetWare 3.x endpoint implementation queue
Default runtime work should finish documented NetWare 1.x/2.x/3.x behaviour
first. The rows below are grouped by feature area, not by patch sequence.
Status meanings: done = implemented and tested enough to leave the active
queue; partial = useful code exists but layout/edge cases/tests remain;
open = known implementation work remains; later = document or guard until a
client/test requires it.
| Family / endpoint area | Generation | Status | Next work |
|---|---|---|---|
Bindery/property relations, including NCP 17/4C List Relations of an Object |
2.x/3.x | open | Add direct tests for group membership, GROUPS_I'M_IN, and relation-listing edge cases. |
Message/bindery forwarded groups from nwconn to nwbind |
2.x/3.x | partial | Keep dispatcher comments paired with parser layouts; verify forward-vs-incomplete paths. |
Old direct file/logical/physical synchronization and lock calls 0x2222/01 through 0x2222/0e |
1.x/2.x legacy | partial | Preserve old-client behaviour where DOS clients still exercise these calls; add minimal direct probes. |
Broadcast/message compatibility around 0x2222/12 through 0x2222/15 |
1.x/2.x legacy | partial | Recheck observable DOS utility behaviour before changing parser logic. |
Directory Services group 0x2222/22 namespace/directory selectors through the 3.x range |
3.x | partial | Complete request/reply comments and tests for namespace, search-map and directory-handle edge cases. |
Directory quota calls decimal 22/35, 22/36 (wire/code 0x23, 0x24) |
3.x | done | Stable; keep regression tests only. |
Directory quota scan decimal 22/40 (wire/code 0x28) |
3.x | partial | Sequence byte order is handled; enrich scan reply semantics after related resource-fork/namespace fields are understood. |
Salvage scan/recover/purge bridges, including old 22/27, 22/28, 22/29 style views |
3.x | partial | Align NCP replies, JSON sidecars and NSS-shaped deleted metadata from one snapshot builder. |
File Server Environment group 0x2222/23 usage/volume/LAN/server-status selectors |
3.x | partial | Add selector-specific tests for monitor tools and ensure dummy/no-op replies are explicitly documented. |
| File Server Environment open-file, lock/semaphore monitor and console-control selectors | 3.x | open | Decide exact compatibility replies for old admin tools; add direct tests where DOS tools do not trigger paths. |
| Semaphore groups, including forwarded selector families and direct old-style calls | 2.x/3.x | partial | Separate implemented forwards from incomplete direct calls; add lock/semaphore probes. |
Extended Attribute group 0x2222/86 |
3.x | partial | Keep work tied to backup/metadata compatibility and existing xattr roundtrip tests. |
Name Space groups 0x2222/87 and 0x2222/89, DOS namespace selectors |
3.x | open | Make DOS namespace rules match old clients before broad LONG/OS2 expansion. |
Name Space groups 0x2222/87 and 0x2222/89, LONG/OS2 metadata/search selectors |
3.x | partial | Implement only the pieces required by existing clients and 3.x filesystem semantics. |
| AFP/Mac selector families where they touch existing metadata storage | 3.x adjacent | partial | Keep behind the AFP backend boundary; do not block DOS namespace or salvage metadata work. |
| Queue, print and TTS compatibility selectors | 3.x | partial | Fix queue path case handling and keep TTS limited to documented client needs. |
NetWare 4.x endpoint status queue
NetWare 4.x work is not a separate future-only bucket: some compatibility calls are already present. The rule is that new broad 4.x runtime behaviour must be explicitly chosen or guarded, while already useful compatibility implementations may remain active.
| Family / endpoint area | Status | Policy / next work |
|---|---|---|
0x2222/22/50 Get Object Effective Rights for Directory Entry |
partial / implemented compatibility | Keep active compatibility code; verify layout and rights semantics against clients and direct tests. |
0x2222/22/51 Get Extended Volume Information |
partial / implemented compatibility | Keep active compatibility code; verify volume fields and ensure 3.x clients are not regressed. |
| Other Directory Services 4.x high selectors | later / guarded | Document exact request/reply layout before enabling default runtime behaviour. |
| Additional File Server Environment 4.x monitor/admin selectors | later / guarded | Implement only when a concrete admin tool or compatibility test requires it. |
| NDS/NCP Fragger and related 4.x infrastructure | later / guarded | Keep out of default runtime until transport/client scope is explicit. |
| TimeSync and NCP Extension families | later / guarded | Reference/stub only unless a real 3.x/4.x client path requires them. |
| Migration, compression, data migration and later OES/MOAB-style selectors | reference-only | Study reusable data models only; do not add default live endpoints during the 3.x push. |
Active backlog by work area
1. Filesystem and namespace compatibility
Goal: finish NetWare 1.x/2.x/3.x filesystem behaviour before broad new runtime work.
- Adapt DOS namespace behaviour from the NSS/reference model:
- legal-name checks;
- case folding;
- wildcard matching;
- reserved names;
- stable 8.3 alias generation;
- host-path conflict handling on case-sensitive filesystems.
- After DOS namespace behaviour is stable, adapt LONG/OS2 namespace behaviour required by 3.x clients and existing MARS-NWE paths.
- Keep trustee/effective-rights, data-stream, extended-attribute, object-id, search-map and salvage work scoped to what supports the 1.x/2.x/3.x target.
- Avoid importing whole NSS/OES subsystems. Adapt data models and helper logic into MARS-NWE/libnwfs where useful.
2. Salvage metadata and backup-tool compatibility
Current base:
- MARS-NWE already has a Samba-friendly salvage/recycle model: live deletes move
payloads into
.recycle, and.salvageJSON sidecars keep enough information for NCP scan, recover and purge. - External backup/restore tools that scan NetWare xattrs still need a more NSS-shaped view of deleted objects.
Follow-up:
- Add a shared salvage snapshot builder in libnwcore/libnwfs instead of keeping one-off JSON filling, trustee filling, metadata filling and NCP reply filling in separate modules.
- Preserve
.recyclepayload compatibility. Do not replace the host layout with an NSS purge tree. - For each salvaged file, write or mirror
netware.metadatawith the same NSS-shaped fields used for live files:- DOS attributes;
- create/archive/modify/access times where available;
- owner/archiver/modifier IDs;
- inherited-rights mask;
- trustees;
- deleted time and deleted-by identity;
- original parent/name identity.
- Keep volume salvage reporting vocabulary aligned with NSS concepts such as
purgeable bytes, non-purgeable bytes, deleted-file count, oldest deleted time,
keep seconds and watermarks, even if MARS stores the data in
.recycleand.salvage. - Add host-side backup-style tests that verify salvaged payloads expose both the JSON sidecar and NSS-shaped xattrs.
3. Administration, queues, printing and operational behaviour
- Add a real console-operator privilege model instead of mapping console rights directly to supervisor equivalence.
- Decide where console-operator state should live:
- bindery property;
- server configuration;
- explicit internal list similar to queue operator handling.
- Fix queue spool path case handling so DOS/bindery names do not create duplicate Unix directories that differ only by case.
- Resolve queue job file paths case-insensitively or use the queue object's already-resolved Unix spool directory instead of rebuilding it from a DOS path.
- Continue
Q_UNIX_PRINTcleanup where it improves observable NetWare client behaviour. - Keep TTS work focused on documented 2.x/3.x client compatibility; do not add a broad transaction subsystem unless a real client path needs it.
4. Extended attributes, AFP/Mac and metadata families
- Continue extended-attribute work only where it supports the 3.x filesystem target, existing clients or backup-tool compatibility.
- Keep AFP/Mac metadata work behind the existing backend boundary; do not let AFP cleanup block DOS namespace or salvage metadata work.
- Align xattr naming and validation helpers so live files, salvaged files and test dump tools use the same NSS-shaped metadata builders.
5. Test infrastructure
- Keep live smokes easy to collect: one bundle per functional area, with one log
per volume and an
nw.logslice from the start of the test. - Keep DOS tool smokes paired with Linux helper scripts when setup requires host state, for example quota limits or filesystem images.
- Extend CTest only with checks that can run without a live IPX/NCP server.
- Plan an isolated live-test server tree that can be driven from the CMake build once the transport no longer depends on host IPX setup.
- The future test environment should generate its own SYS tree and quota image, then start a local MARS-NWE instance from the test build.
6. Third-party and shared-library layering
- Keep mars-nwe-owned
.cand.hfiles under GPL-compatible project control. - Maintain clear boundaries for third-party code:
- libowfat-style helpers where they simplify core code;
- MatrixSSL/libnwssl only where needed for existing SSL/FLAIM/NICI work;
- FLAIM wrappers without invasive upstream source rewrites.
- Keep shared helper naming consistent:
- generic filesystem/quota helpers under
nwfs_*; - Linux quota helpers under
nwfs_lnxquota_*; - NetWare metadata quota helpers under
nwfs_nwquota_*; - salvage/metadata snapshot helpers in a shared libnwcore/libnwfs layer once they exist.
- generic filesystem/quota helpers under
Done / stabilized areas
These items are no longer active TODOs. Keep patch-by-patch chronology in
AI.md; this section records the stable functional result only.
Quota landscape
- Directory quotas on the Linuxquota-backed
QUOTAvolume are implemented and live-tested through NetWare 3.x NCP decimal22/35and22/36(wire/code0x23and0x24) for set, get, clear, Linux Project Quota mirroring, and NSS-shapednetware.metadata. - User quotas on
QUOTAuse Linux quota as the authoritative live backend and enforce deny-before-data on NCP writes. - User quotas on
SYSuse the NWQUOTA metadata backend as the authoritative state and enforce deny-before-data on NCP writes. netware.userquota.0is the canonical NSS-shaped userquota mirror;reserved2remains zero and is not used as a live MARS usage counter.- The all-quota live smoke covers ctest, directory quota, Linuxquota userquota,
SYS metadata, NWQUOTA userquota and an
nw.logslice. - The DOS quota smoke proves the same write-deny boundary from DOS board tools
for both
QUOTAandSYS.
NSS low-level library imports
- Import small GPL-2 NSS low-level library helpers with original file/API names where they can be compiled outside the NSS runtime.
- Keep imported compiled helpers directly in
src/core//libnwcore, not under a new artificialnss/subdirectory; preserve original names so the NSS provenance and possible external-source compatibility remain clear. - Initial compiled import is
bitmap.c/bitmap.hinlibnwcore; replace local duplicate bitmap/bit allocation helpers gradually only after tests cover each call site. - Keep libowfat-provided primitives where they are already the better fit; use NSS helpers where NetWare/NSS source compatibility or media-layout semantics matter.