All checks were successful
Source release / source-package (push) Successful in 50s
Record the verified Linux smoke-test output for NCP 0x2222/35 subfunctions 0x11 and 0x0a, AFP Scan File Information and AFP 2.0 Scan File Information. The WebSDK/header-level request layout for both scan calls carries the Mac base directory id, last-seen entry id, desired response count, search bitmap, request bitmap, and path modifier. The current mars_nwe implementation intentionally routes both variants through the same conservative path-backed directory scan and returns a single AFP file-information record per request. Documenting the matching 0x11 and 0x0a first-record output makes that compatibility choice explicit. The recorded continuation case also documents the current last_seen pagination contract: callers feed the returned next_last_seen AFP Entry ID back into the next request to advance through SYS:PUBLIC. The sample entries remain stat-derived fallback Entry IDs with parent_id kept at zero until persistent CNID/AppleDouble/libatalk-backed directory identity is available. Tests: - ./afp_scan_info_smoke -S MARS -U SUPERVISOR -P ... SYS:PUBLIC - ./afp_scan_info_smoke --afp10 -S MARS -U SUPERVISOR -P ... SYS:PUBLIC - ./afp_scan_info_smoke -S MARS -U SUPERVISOR -P ... --last-seen 0x23c8787d SYS:PUBLIC TODO: - Add multi-response scan replies once the record packing and client-side parsing are widened beyond the current one-record smoke path. - Replace stat-derived fallback Entry IDs with persistent CNID/AppleDouble/libatalk-backed IDs.
13 KiB
13 KiB
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 Privilegesis 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/200as 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 Objectis implemented server-side.- Existing DOS and Linux tools do not reliably trigger it for all useful set properties such as
GROUP_MEMBERSandGROUPS_I'M_IN.
Follow-up:
- Add a small direct test utility to
mars-dosutils/NWTESTSthat sendsNCP 17/4Cdirectly. - Suggested test cases:
TESTGRP1type0x0002, propertyGROUP_MEMBERSTESTGRP2type0x0002, propertyGROUP_MEMBERSMARIOtype0x0001, propertyGROUPS_I'M_INNOPASSUSERtype0x0001, propertyGROUPS_I'M_INGUESTtype0x0001, propertyGROUPS_I'M_IN
NCP endpoint SDK documentation / stub audit
Current status:
- Several legacy NCP endpoints in
src/nwconn.care implemented only as disabled stubs, explicit0xfbunsupported 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 inTODO.md.
NCP endpoint audit tracking
Current status:
src/nwconn.ccontains 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
nwserverimplementation,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)innwconn.cas incomplete: many of those paths intentionally forward bindery/global-server work tonwbind.
NCP synchronization endpoint audit
Current status:
- The old NCP synchronization endpoint family in
src/nwconn.cis 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, and0x1ehave 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 Informationreturns the documentedNWVolExtendedInforeply 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
NWVolExtendedInfofields 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 Restrictionskeeps the existingQUOTA_SUPPORTsplit.- With quota support enabled, the endpoint is routed through
nwbindso 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_PRINTbackend 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 Availablereports 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.
AFP / Mac namespace backend
Current status:
NCP 0x23still returns invalid namespace for AFP calls that are not implemented yet.AFP Get Entry ID From Path Nameis implemented when the optional Netatalk/libatalk backend is available. Linux smoke coverage exists intests/linux/afp_entry_id_smokeand has been verified againstSYS:,SYS:PUBLIC,SYS:SYSTEM, andSYS:BURSTwith stat-derived fallback entry IDs.AFP Get Entry ID From Nameis implemented for the same path-backed smoke mode. Linux smoke coverage usestests/linux/afp_entry_id_smoke --from-nameand has been verified againstSYS:,SYS:PUBLIC,SYS:SYSTEM, andSYS:BURSTwith stat-derived fallback entry IDs.AFP Get File Informationis implemented for read-only path-based requests. Linux smoke coverage exists intests/linux/afp_file_info_smokeand has been verified againstSYS:,SYS:PUBLIC,SYS:SYSTEM, andSYS:BURST. The same test verifies the AFP 2.0 Get File Information subfunction via--afp20against the same paths, using the same path-backed read-only reply for now. The current reply fills stat/libatalk-derived fields and leaves persistent CNID Parent ID / fuller Mac namespace metadata as future work.AFP Scan File Information(0x0a) andAFP 2.0 Scan File Information(0x11) are implemented for path-backed read-only directory scans. Linux smoke coverage exists intests/linux/afp_scan_info_smoke; the helper defaults to the AFP 2.0 subfunction and uses--afp10for the older endpoint. Runtime coverage has been verified againstSYS:PUBLICby walking multiple directory entries with the returnednext_last_seenAFP Entry ID continuation value. The verified AFP 2.0 and older0x0afirst records both returnpmdflts.ini(entry_id=0x23c8787d,data_len=8161) on the sample tree, and an AFP 2.0 continuation with that Entry ID returnsohlogscr.bat(entry_id=0x260437f6,data_len=1296).AFP Get Entry ID From NetWare Handleis implemented for read-only data-fork file handles that are opened in the same client connection. Linux smoke coverage usestests/linux/afp_entry_id_smoke --from-handleand has been verified againstSYS:PUBLIC/pmdflts.iniandSYS:PUBLIC/ohlogscr.bat, returning volume 0,fork=0, and stat-derived fallback Entry IDs for now.AFP Open File Forkis implemented for the same path-backed smoke subset. RawVOL:-style paths resolve the effective NetWare volume from the path prefix instead of assuming volume 0, so the same smoke path can coverSYS:and non-SYS:volumes. It opens only the data fork read-only and returns a normal six-byte NetWare file handle plus the current data-fork length; the Linux smoke helpertests/linux/afp_open_file_fork_smokecloses the returned handle in the same connection. Runtime smoke coverage is green forSYS:PUBLIC/pmdflts.ini(fork_len=8161) andSYS:PUBLIC/ohlogscr.bat(fork_len=1296) usingfork=0and read access0x01. Resource-fork opens, write access, and Entry-ID-only lookup stay TODO until AppleDouble/resource-fork and persistent CNID/base-ID semantics are available.AFP Alloc Temporary Directory Handleis implemented for the same path-backed smoke subset. RawVOL:-style paths resolve the effective NetWare volume from the path prefix instead of assuming volume 0. Linux smoke coverage exists intests/linux/afp_temp_dir_handle_smoke; runtime smoke coverage is green forSYS:,SYS:PUBLIC,SYS:SYSTEM, andSYS:BURST. The helper returns a temporary NetWare directory handle plus the AFP one-byte access-rights mask and immediately deallocates the handle in the same connection. Server diagnostics log the wider internal NetWare effective-rights mask, so privileged directories can showrights=0x1ffwhile the client printsrights=0xff. Entry-ID-only allocation remains TODO until persistent CNID/base-ID lookup exists.- The AFP dispatcher now decodes the WebSDK/NWAFP subfunction number in diagnostics so real client probes can be mapped to the corresponding AFP call before implementation work starts.
- Optional build-time detection/linking for Netatalk/libatalk exists as a first local metadata backend hook. It is deliberately not an AFP protocol implementation yet.
- NetWare AFP calls are NCP entry points for Mac namespace semantics on a
NetWare volume, not transport-level AFP proxy calls to
afpd.
Follow-up:
- Implement the NetWare AFP NCP calls locally, using libatalk helpers rather
than proxying requests to
afpd. - Candidate libatalk pieces include the new AppleDouble/Finder Info/resource fork helper wrappers, plus future CNID/directory-id helpers, attribute mapping, and filename conversion.
- Keep returning invalid namespace for AFP calls that still lack a real per-volume Mac namespace/AFP metadata layer. Do not return success for additional AFP calls without data/resource fork and Finder Info semantics.
- Replace the temporary stat-derived AFP entry-id fallback with a persistent CNID/directory-id mapping once the libatalk/CNID backend is integrated.
- Extend the Linux AFP smoke tests once additional AFP subfunctions are implemented, especially Finder Info updates, fork open/read/write paths, resource-fork handling, and broader directory-scan edge cases.
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.