292 lines
12 KiB
Markdown
292 lines
12 KiB
Markdown
# 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.
|
|
|
|
|
|
|
|
### Server logging schema
|
|
|
|
Current status:
|
|
|
|
- Server logging is useful during protocol work, but output is still noisy and
|
|
not formatted consistently across NCP, namespace/path mapping, AFP, bindery,
|
|
file, queue, trustee, and salvage code.
|
|
- During salvage endpoint development, verbose logs are preferred over missing
|
|
diagnostic information, but the messages should become easier to grep and
|
|
compare across subsystems.
|
|
|
|
Follow-up:
|
|
|
|
- Normalize new server log lines toward this shape:
|
|
|
|
```text
|
|
<LVL4> <AREA> <DEC-CODE> <EVENT> key=value ...
|
|
```
|
|
|
|
- Use four-character levels so columns do not jump around:
|
|
- `INFO`
|
|
- `DBUG`
|
|
- `WARN`
|
|
- `ERRR`
|
|
- Put the level first, then the subsystem/function area, for example `NCP`,
|
|
`SALVAGE`, `AFP`, `MAP`, `BIND`, `TRUST`, `AUTH`, `CONN`, `FILE`, or `QUEUE`.
|
|
- Use decimal/protocol-facing endpoint identifiers near the front when they are
|
|
what the documentation uses, for example `87/16`, `87/17`, and `87/18`.
|
|
- Keep exact wire values as hex key/value fields later in the same line, for
|
|
example `fn=0x57 sub=0x10 ns=0x00 seq=0x00000000 vol=0x0000
|
|
base=0x00000004 result=0x89ff`.
|
|
- Mark missing or unimplemented endpoints with a stable `UNKNOWN` event, for
|
|
example:
|
|
|
|
```text
|
|
INFO NCP 87/18 UNKNOWN fn=0x57 sub=0x12 msg="not implemented"
|
|
INFO NCP 87/255 UNKNOWN fn=0x57 sub=0xff msg="unknown subfunction"
|
|
INFO NCP 136 UNKNOWN fn=0x88 msg="unknown function"
|
|
```
|
|
|
|
- Prefer existing mars_nwe logging functions/macros. Do not introduce a second
|
|
logging subsystem just to change the message format.
|
|
- Convert noisy areas gradually, starting with NCP function/subfunction dispatch
|
|
and the salvage endpoints.
|
|
|
|
## 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.
|
|
|
|
### Salvage / deleted-entry backend
|
|
|
|
Current status:
|
|
|
|
- The shared salvage backend lives in `src/nwsalvage.c` /
|
|
`include/nwsalvage.h` and is hooked into the normal server delete path.
|
|
- Deleted payloads are moved to `.recycle` and per-object JSON sidecars are
|
|
written below `.salvage`.
|
|
- The sidecar schema preserves NetWare archive/fileinfo xattrs, AFP metadata
|
|
when present, inherited rights mask, and explicit trustee entries.
|
|
- The runtime configuration uses low `nw.ini` sections `51-59`. Section `53`
|
|
maps Samba-style behaviour flags (`k`, `v`, `t`, `m`), and sections
|
|
`55-58` cover size filters, exclude, exclude_dir, and noversions lists.
|
|
- NCP delete, Samba-compatible history naming, and the initial `87/16` salvage
|
|
scan are covered by the combined smoke suite in `tests/salvage/`.
|
|
- `NCP 0x2222 / 87 / 16` has a backend-backed scanner that reads `.salvage`
|
|
JSON entries and returns one salvageable entry per call.
|
|
|
|
Follow-up:
|
|
|
|
- Continue the normal NetWare salvage family on top of the shared backend:
|
|
- `NCP 0x2222 / 87 / 17` - Recover Salvageable File
|
|
- `NCP 0x2222 / 87 / 18` - Purge Salvageable File
|
|
- optional legacy `NCP 0x2222 / 22 / 27` - Scan Salvageable File (old)
|
|
- Append endpoint-level recover/purge checks to `tests/salvage/salvage_smoke_suite.sh`.
|
|
- Add cleanup coverage for stale `.salvage` JSON when the matching `.recycle`
|
|
payload has been manually removed.
|
|
|
|
### AFP / Mac namespace backend
|
|
|
|
Current status:
|
|
|
|
- The active AFP compatibility slice is implemented and covered by the smoke
|
|
tests under `tests/afp/`. Endpoint inventory, WebSDK audit notes, and AFP
|
|
implementation history live in that directory instead of this project-level
|
|
TODO file.
|
|
- AFP `0x13 Get Macintosh Info On Deleted Files` remains unsupported until the
|
|
NCP salvage scan/recover/purge endpoints expose the shared deleted-entry
|
|
backend semantics.
|
|
|
|
Follow-up:
|
|
|
|
- After the NetWare salvage endpoints exist, implement AFP `0x13` as an adapter
|
|
over the mars_nwe salvage/deleted-entry record.
|
|
- AFP must not scan `.recycle` or `.salvage` directly.
|
|
- Keep the detailed AFP TODO, inventory, and audit notes in `tests/afp/`.
|
|
|
|
## 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.
|