Add function-level comments to the shared helper routines in tools.c.
Document the purpose and behavior of the common DOS compatibility, keyboard,
paging, memory, string, environment, current directory handle, path formatting,
wildcard and endian/NCP22 helper functions.
No behavior change.
Add function-level comments to the low-level NCP wrapper functions in
ncpcall.c.
Document each wrapper's purpose, NCP function/subfunction, requester path and
return behavior. The descriptions are based on the existing implementation and
cross-checked against the MARS-NWE admin sources and Novell SDK/WebSDK
references.
No behavior change.
Rename the bindery access level wrapper from ncp17_46_get_bindery_access_level()
to ncp14_46_get_bindery_access_level().
The previous rename made the operation look like a normal NCP17 bindery wrapper,
but the historic implementation used the ncp_14_46 naming. Keep that protocol
reference visible while retaining the descriptive operation name.
No behavior change.
Rename the low-level NCP wrapper functions in ncpcall.c and net.h to include
both the NCP function/subfunction number and the operation they perform.
This keeps the numeric protocol reference visible for comparison with SDK
documentation and MARS-NWE logs, while making call sites easier to understand.
Update all callers to use the new names.
No behavior change.
Replace small local path predicate wrappers with the shared tools.c helpers.
NDIR now uses tool_is_dot_dir() directly and NCOPY uses tool_has_wildcards()
for wildcard checks. More behavior-sensitive NCOPY path helpers are left local
for now to avoid changing path normalization or default handling while NCOPY
remains under investigation.
Remove generic wrapper helpers from trustee.c and switch GRANT/REMOVE/REVOKE
callers to the shared tools.c helpers directly.
Keep trustee.c focused on Trustee/Rights-specific behavior such as option
parsing, rights parsing/formatting, object lookup and trustee path handling.
The generic string, current directory handle, uppercase and path helper logic
now lives in tools.c where it can be reused by other DOS utilities.
Add tool_current_dhandle_only() as a small wrapper for callers that only need
the current NetWare directory handle.
Replace the local creator_current_dhandle() and tests_current_dhandle()
implementations in CREATOR and NWTESTS with the shared helper. This removes
duplicate requester-current-directory code without changing behavior.
Replace local case-insensitive argument comparison helpers in MAP, SLIST,
WHOAMI and NWTESTS with the shared tool_strsame() helper.
This removes small duplicate helpers without changing command parsing behavior.
Trustee-specific wrappers and the experimental NCOPY code are intentionally
left untouched.
Move the common NCP22 DOS name buffer helper into tools.c and declare it in
net.h.
Replace the local copy/uppercase implementations in CREATOR, FLAG, FLAGDIR,
NDIR and NWTESTS with tool_copy_ncp22_name(). The helper keeps the existing
behavior: uppercase conversion, path separator rejection and the 1..12 byte
DOS name length limit.
NCOPY is intentionally left untouched while its NCP copy path remains under
investigation.
Move common little-endian and big-endian buffer helpers into tools.c and
declare them in net.h.
Replace local duplicate implementations in FLAG, FLAGDIR and NDIR with the
shared helpers. This keeps the existing packet layouts unchanged while reducing
copy/paste code across the DOS utilities.
NCOPY and the experimental NCP copy code are intentionally left untouched for
now.
Add GPL-2-or-later license headers to the DOS utility source files and
document the purpose and local dependencies of each C, header and assembler
file.
Preserve the original Martin Stover copyright attribution for the historic
MARS-NWE utility sources, including files that did not previously carry an
explicit header but are part of the original tool set. Add Mario Fetka as the
2026 copyright holder for the current maintenance work, and use Mario-only
headers for files without original Martin Stover ownership.
Also add a root-level COPYING file containing the GPL-2 license text.
Update the DOS utilities and test suite with the current Novell comparison
state.
Validated/updated tool behavior:
- improve CREATOR output by showing Novell-style attribute and rights masks
- extend FLAGDIR handling with old NCP22 directory attribute read/write
fallback paths
- expand NDIR Novell-style formatting, filtering, /SUB handling, date output,
DI/RI attribute display and richer metadata collection
- adjust REVOKE output/grammar, recursive /SUBDIRECTORIES behavior and trustee
update/delete paths to better match Novell tools
- adjust SLIST header/output behavior for logged-in and logged-out cases
- update README status to reflect the currently green/tested tools
Test-suite changes:
- add/refresh Novell comparison tests for CREATOR, NDIR, REVOKE and SLIST
- update NCOPY tests and collection scripts for the current investigation state
- refresh per-tool README files and top-level test documentation
- keep MAP documented as still separately open
NCOPY:
- add the current NCOPY implementation and experimental NCP74/server-side-copy
scaffolding
- build ncopy.c so it stays compile-tested
- keep NCOPY disabled in the NET multicall dispatch for now because the
server-side-copy/open-handle path is still unsafe and needs further analysis
Build:
- include ncopy.c in the DOS utility build
- drop the temporary MARS_DOSUTILS_VERSION define wiring from CMake
Move FLAG, GRANT and REMOVE closer to the request paths used by the
Novell tools and extend the DOS comparison tests.
FLAG now reads attributes through the old NCP22 directory scan path and
writes them through NCP22/25 Set Directory/File Information. This keeps
extended attributes such as Delete Inhibit and Rename Inhibit intact and
matches the Novell behavior observed in the server logs.
GRANT now prefers NCP22/27 SetTrustee with an NCP87 fallback. Supervisor
rights are expanded like Novell does, so granting S sends and reports the
full SRWCEMFA mask. The visible output, path formatting and error text
are adjusted to match the Novell baseline.
REMOVE now prefers NCP22/2B DelTrustee with an NCP87 fallback. The
DelTrustee request layout is corrected, /SUBDIRS handling is aligned
with Novell, and the output/error text is matched to the baseline.
The FLAG, FLAGDIR, GRANT and REMOVE tests now compare NPUBLIC baselines
against the PUBLIC implementations and add delayed NOPASSUSER readback
checks using DLYSTRT and the maintainer LOGIN password option.
Do not fall back to the literal server name "MARS" in LOGIN or WHOAMI.
LOGIN now uses a neutral usage example and tries to resolve the current
file server through the active connection/NCP server info. If no server
name can be determined, it reports the Novell-style error:
No known file server.
WHOAMI likewise no longer invents a default server name. If the current
server name cannot be resolved, it reports the Novell-style failure:
Unable to get server name. (%x)
This keeps the tools usable on servers with arbitrary names instead of
silently producing MARS-specific output.
Add maintainer-only support used by the automated DOS compatibility
tests.
This introduces the MAINTAINER_BUILD option for the DOS tools. In
maintainer builds, LOGIN accepts the hidden /PWD: and /PASSWORD:
arguments for automated test relogin, and the DLYSTRT helper is built to
delay-start DOS batch files after the invoking batch has returned to the
prompt.
Add the WHOAMI utility and wire it into the NET command dispatch. Also
adjust SLIST and RIGHTS output to match Novell behavior more closely,
including server-not-found handling, path formatting, Supervisor rights,
missing-path errors and usage text.
Extend the test scripts to compare NPUBLIC Novell baselines against the
PUBLIC implementations. LOGIN/LOGOUT can now run automatically via
DLYSTRT and the maintainer LOGIN password option. RIGHTS gains an
additional NOPASSUSER effective-rights matrix that covers single rights,
mixed rights, Supervisor rights, ALL/N and file trustee cases.
Normal builds remain free of maintainer-only helpers and hidden password
handling.
Add DOS-side baseline scripts for the Novell tools used to compare the
reimplemented public utilities.
The suite covers the current baseline set:
MAP
SLIST
WHOAMI
LOGIN / LOGOUT
NDIR
NCOPY
FLAG
FLAGDIR
CREATOR
RIGHTS
GRANT
REVOKE
REMOVE
It also includes supporting trustee, rights, rename, move, delete and
file-operation tests.
Each test writes reproducible output into a per-tool CMP directory and
provides a matching ZIP helper for collecting the results. The ZIP
helpers clean generated test trees afterwards so SYS: does not keep
accumulating temporary directories.
This is the Novell baseline layer only. A later change can extend the
same scripts to run the full comparison cycle:
NPUBLIC baseline -> PUBLIC implementation -> NPUBLIC control
Add the CREATOR utility and wire it into the DOS tools build and NET
command dispatch.
Extend the client-side NCP helpers with the calls needed by the new and
updated tools, including DOS namespace information and effective-rights
queries. Also update MAP handling for automatic drive mappings used by
the login script.
This commit contains the tool/source support only. The DOS baseline test
suite is kept separate and will be added in a follow-up commit.
Add a Client32 NCP87 helper for obtaining DOS namespace file and
subdirectory information and use it in NDIR.
The new helper reads the classic NCP87 subfunction 6 RIM_ALL DOS info
block, including timestamps, inherited rights, directory identifiers and
size metadata.
Use the NCP87 inherited rights mask for the inherited-rights column while
keeping the existing Client32 effective-rights path for the effective
rights column. Also use the NCP87 modify, archive, last-access and
creation date fields for the /DATES display, falling back to DOS
findfirst timestamps when the NCP87 info request is not available.
Tighten the /DATES layout so the full Created/Copied timestamp remains
within an 80-column DOS screen.
Add an initial Novell-style NDIR implementation for the DOS utilities.
The new tool supports basic DOS namespace directory listings using
_dos_findfirst/_dos_findnext, including wildcard paths, current-directory
listing, files-only and directories-only modes, recursive /SUB listings,
continuous output and Novell-style help text.
NDIR separates file and directory output into Novell-like sections,
prints long NetWare-style attribute brackets, and reports both file bytes
and allocated bytes in blocks using a simple per-file 4 KiB block
approximation for the initial implementation.
Add initial /RIGHTS support. The rights format displays rights columns
for files and directories, obtains effective rights through Client32
NCP87, and falls back to the older directory-handle effective-rights path
when needed. For now the inherited-rights column uses the effective
rights value until a separate inherited-rights mask is available.
Add initial /DATES support with a Novell-style date column layout showing
Last Updated, Last Archived, Accessed and Created/Copied fields. The
initial implementation uses the DOS findfirst update timestamp for the
available date values and placeholder archive/access values until full
NetWare namespace date fields are exposed.
Add /SHORT and /BRIEF as compact output modes for recursive listings and
manual testing. These modes keep the useful values while suppressing the
large Novell-style section headers and empty recursive sections.
Wire NDIR into the multicall dispatcher, CMake build and install list,
and document the supported command forms in the README.
Owner display, true inherited-right masks, full namespace date fields,
sorting and restrictions remain future work.
Move common DOS utility helper code into tools.c and expose it through
net.h. This removes duplicated command-local helpers from GRANT,
RIGHTS, FLAG, FLAGDIR and the trustee helper layer.
The shared helpers cover case-insensitive argument comparison, help and
option detection, /FILES and /SUBDIRS parsing, current network directory
handle lookup, current volume prefix formatting, uppercase DOS path
copying, basename/header-path handling, wildcard detection and simple
path joining/splitting.
Keep the command frontends smaller and less coupled so the current
multicall utility can later be split into smaller grouped multicall
binaries, such as trustee tools, login/session tools and file/flag
tools.
Update the DOS utilities README for the newer Client32 and trustee
commands. Document RIGHTS, GRANT, REVOKE and REMOVE in the status,
feature, command and install sections. Add command reference entries
for the trustee tools, including Novell-style syntax, supported rights,
recursive/file options and missing-trustee behavior.
Also mention the shared trustee helper layer and common tools.c helpers
used by the newer command frontends.
Implement REVOKE and REMOVE for the Client32 DOS utilities.
REVOKE now supports Novell-style syntax:
REVOKE rightslist* [FOR path] FROM [USER|GROUP] name [options]
and removes rights from explicit trustee assignments. It scans the
trustee list first, updates the trustee rights mask, and deletes the
trustee entry when no rights remain.
REMOVE now supports Novell-style syntax:
REMOVE [USER | GROUP] name [FROM path] [option]
and deletes explicit trustee assignments for users or groups.
Both tools support USER/GROUP lookup, /FILES, /SUBDIRS,
/SUBDIRECTORIES, wildcard file targets, recursive directory handling,
Novell-style help text and summary output. Missing trustee entries are
reported with Novell-style "No trustee for the specified ..." messages.
Add shared trustee helpers and Client32 NCP87 trustee scan/delete
support. Also adjust GRANT ALL so it matches Novell behavior by not
granting Supervisor implicitly; Supervisor must be granted explicitly.
- add a shared DOS pager helper for long tool output
- page FLAG wildcard output with the Novell continue prompt
- fix FLAGDIR current-directory handling for "." and volume root
- add FLAGDIR wildcard directory listing support
- page FLAGDIR wildcard output like Novell FLAGDIR
- keep FLAGDIR display formatting aligned with Novell output
- make SLIST /CONTINUE enable continuous output
- keep SLIST bindery scanning compatible with ncpfs behavior
- preserve SLIST NET_ADDRESS display and default server marking
- add GRANT as a new multi-call DOS utility
- implement Client32 NCP87 trustee-add helper
- resolve USER and GROUP bindery objects before granting rights
- support Novell-style rights lists, including ALL and N
- support directory trustee grants
- support file trustee grants via /FILES
- implement recursive grants via /SUBDIRECTORIES
- accept /SUBDIRS as a compatibility alias
- format GRANT success output close to Novell GRANT
- add GRANT comparison scripts for normal and recursive test cases
- add RIGHTS as a new multi-call DOS utility
- implement Client32 NCP87 effective-rights query helper
- map NCP effective-rights bits to Novell RIGHTS display order
- keep legacy directory-handle based rights lookup as fallback
- match Novell RIGHTS output for directories and files more closely
- remove hardcoded MARS/SYS and SYS display fallbacks from RIGHTS/FLAGDIR
- derive display prefixes from the active network drive where available
- adjust FLAGDIR output formatting to match Novell field alignment
- keep FLAG and SLIST unchanged after checking for hardcoded prefixes
Keep the previous DOS utility binary as netold.exe and use it as the
default source for legacy command names. Install the new net.exe only for
tools that are not available in the legacy binary, currently SLIST, FLAG
and FLAGDIR.
Add CMake selection logic so maintainers can opt into installing the new
binary for all command names with MARS_NWE_INSTALL_NEW_DOSUTILS, while the
default install remains conservative for older NETX/DOSX-style setups.
Update the staged net.exe to the current Client32-enabled build and add
netold.exe as the preserved legacy binary.
Add a NetWare-style FLAGDIR implementation for directory attributes and
register it in the multi-call DOS utility dispatcher. The new command
supports the 386-style directory flags Normal, System, Hidden,
DeleteInhibit, Purge and RenameInhibit, and formats output close to the
Novell FLAGDIR tool for simple mapped paths.
Update the DOS utilities install/build metadata so flagdir.exe is emitted
alongside the other public tools. Adjust the Open Watcom CMake build to
compile C sources into the build directory instead of leaving object files
in the source tree.
Move the historical Borland/TASM build files into doc/ to keep the active
source directory focused on the modern Watcom/CMake build.
Implement a working DOS Client32 NCP87 path using the NIOS resolver,
CONNOpenByReference and COMPATNcpRequestReply.
Add an initial FLAGDIR implementation for NetWare 386-style directory
attributes. Support Normal, System, Hidden, Delete Inhibit, Purge and
Rename Inhibit, using the same Client32 NCP87 modify/read helpers. Match
the Novell FLAGDIR display style more closely for simple mapped paths.
Also add/keep minimal TESTS coverage for the verified Client32 NCP87
attribute path.