# TODO This file collects follow-up work that is known but intentionally not part of the current patches. It is meant for project-level items that are too broad or too low-priority to keep as inline source TODO comments. ## Server / NCP compatibility ### Console privilege model Current status: - `NCP 23/200 Check Console Privileges` is implemented as a protocol-compatible status check. - For now, console privileges are mapped to the existing supervisor-equivalence state computed for the connection. - Callers with supervisor equivalence get success; other callers get `0xc6` (`No Console Rights`). Follow-up: - Add a real console-operator privilege model instead of treating console rights as identical to supervisor equivalence. - Decide where the console privilege map should live: - a bindery property, - a server configuration option, - or a small explicit internal list similar to queue operator handling. - Check how NetWare 3.x tools such as `PCONSOLE`, `SYSCON`, and console utilities expect console operators to be represented. - Keep `NCP 23/200` as a completion-code-only endpoint; only the privilege source should change. ### Queue spool path case handling Current status: - Queue job paths can still be rebuilt from DOS/bindery path spelling such as `SYS:SYSTEM/EPSON.QDR`. - On a case-sensitive Unix filesystem this can differ from the existing directory, for example `system/epson.qdr`. Follow-up: - Resolve queue job file paths case-insensitively in the queue connection/path resolver, or use the queue object's already-resolved Unix spool directory instead of rebuilding it from the DOS path. - Avoid creating duplicate directories that differ only by case. ### NCP 17/4C test coverage Current status: - `NCP 17/4C List Relations of an Object` is implemented server-side. - Existing DOS and Linux tools do not reliably trigger it for all useful set properties such as `GROUP_MEMBERS` and `GROUPS_I'M_IN`. Follow-up: - Add a small direct test utility to `mars-dosutils` / `NWTESTS` that sends `NCP 17/4C` directly. - Suggested test cases: - `TESTGRP1` type `0x0002`, property `GROUP_MEMBERS` - `TESTGRP2` type `0x0002`, property `GROUP_MEMBERS` - `MARIO` type `0x0001`, property `GROUPS_I'M_IN` - `NOPASSUSER` type `0x0001`, property `GROUPS_I'M_IN` - `GUEST` type `0x0001`, property `GROUPS_I'M_IN` ### NCP endpoint SDK documentation / stub audit Current status: - Several legacy NCP endpoints in `src/nwconn.c` are implemented only as disabled stubs, explicit `0xfb` unsupported replies, or success/no-op dummies. - The known candidates now have inline SDK-context comments so future work can start from the documented wire semantics instead of from guesswork. Follow-up: - Implement or deliberately reject remaining endpoint gaps after client evidence or direct protocol tests. - Keep SDK details close to the corresponding endpoint in `nwconn.c`, and keep broader prioritization/status here in `TODO.md`. ### NCP endpoint audit tracking Current status: - `src/nwconn.c` contains a mix of implemented, forwarded, partial, dummy, and intentionally unsupported NCP endpoints. - Endpoint comments should be aligned with the Novell SDK Web documentation, SDK headers, the Rust `nwserver` implementation, `lwared`, and the existing mars_nwe admin/Pascal code where those sources cover the same call. Follow-up: - Keep inline `TODO:` comments only where endpoint behavior is incomplete, approximate, intentionally dummy/no-op, or still needs SDK layout verification. - Mirror every real incomplete endpoint in this file so follow-up work remains visible outside the source code. - Do not treat every `return(-1)` in `nwconn.c` as incomplete: many of those paths intentionally forward bindery/global-server work to `nwbind`. ### NCP synchronization endpoint audit Current status: - The old NCP synchronization endpoint family in `src/nwconn.c` is now annotated with Novell SDK endpoint names. - The existing source already marked this area as not well tested, so the comments intentionally keep that compatibility warning visible. - `NCP 0x03`, `0x05`, `0x06`, `0x07`, `0x08`, `0x09`, `0x0a`, `0x0b`, `0x0d`, `0x0e`, `0x1a`, and `0x1e` have local implementations. Follow-up: - Verify the implemented file/logical-record/physical-record calls against the Novell SDK request/reply layouts and a real DOS requester or direct test caller. - Continue direct requester or NWTESTS coverage for the file, logical-record, and physical-record synchronization calls that are now wired. - Verify timeout and error-code behavior for set-oriented locking calls against a real requester, especially where MARS-NWE currently relies on the existing underlying share implementation. ### Extended volume information field mapping Current status: - `NCP 0x16/0x33 Get Extended Volume Information` returns the documented `NWVolExtendedInfo` reply and fills the core fields that can be derived from generic Unix filesystem statistics. - NetWare-specific fields that MARS-NWE does not currently model are returned as zero for now instead of guessed values. Follow-up: - Fill additional `NWVolExtendedInfo` fields when reliable data is available from the backing filesystem or from MARS-NWE metadata. - Candidate fields include suballocation, deleted-file/limbo accounting, compression counters, migration counters, EA counters, Directory Services object id, and last-modified timestamp data. - Treat compression-related fields as real follow-up work rather than permanent zeroes; populate them only when the backing filesystem exposes trustworthy compressed-file or compressed-block accounting. ### Object disk restriction fallback coverage Current status: - `NCP 0x16/0x29 Get Object Disk Usage And Restrictions` keeps the existing `QUOTA_SUPPORT` split. - With quota support enabled, the endpoint is routed through `nwbind` so the bindery Object ID can be mapped to a Unix uid before querying the quota backend. - Without quota support, the endpoint returns the SDK-compatible fallback: unrestricted (`0x40000000`) and no space in use. Follow-up: - Add direct tests for both build modes. - Verify the quota-enabled path against a real Unix quota setup. - Verify that the quota-disabled fallback remains compatible with requesters and with the WebSDK rule for invalid object IDs. ## Printing / Queue backend ### Q_UNIX_PRINT backend status Current status: - Queue metadata handling and the `Q_UNIX_PRINT` backend are intentionally separate. - The backend can already call `/usr/bin/lp`, `lpr`, or a custom script. Follow-up: - Improve logging around queue job submission to the Unix print command. - Capture and expose backend exit status where possible. - Consider direct CUPS integration only if MARS_NWE needs CUPS job IDs, cancellation, or status polling. Do not add a hard CUPS dependency for basic queue compatibility. ### Transaction Tracking System (TTS) Current status: - `NCP 0x22/0x00 TTS Is Available` reports the WebSDK-documented unavailable status. - MARS-NWE does not currently implement TTS rollback semantics, transaction files, transaction status tracking, or the begin/end/abort transaction state machine. - Other TTS subfunctions remain unsupported instead of pretending to succeed without real transaction tracking. Follow-up: - Implement TTS only if a concrete client requires it. - Treat this as a real transaction subsystem, not as a completion-code shim: the WebSDK TTS calls include begin/end/abort transaction, status, threshold, and control/statistics operations. ## Deferred / optional protocol work * Basic Packet Burst file transfer support is implemented and verified with a diagnostics-enabled DOS client test. * Packet Burst support is built by default, but runtime use remains controlled by `nwserv.conf`. * Packet Burst/NDS fragmentation support remains out of scope unless a concrete client requires it.