diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4d24f18 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,65 @@ +################################# +# Project +############## + +################################# +# Dependencies +############## + +################################# +# Compiler Switches +############## + +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_BINARY_DIR}/include +) + +if (CMAKE_SYSTEM_NAME MATCHES Linux) + add_definitions( + -DLINUX -D_GNU_SOURCE -Dsignal=__sysv_signal + ) +endif (CMAKE_SYSTEM_NAME MATCHES Linux) + +add_definitions( + -D_VERS_H_=\"${VERSION_MAJOR}\" + -D_VERS_L_=\"${VERSION_MINOR}\" + -D_VERS_P_=\"${VERSION_PATCH}\" + ) + +################################# +# Source Files +############## + +#add_executable( net logon.c ... ) + +################################# +# Linking +############## + +################################# +# Install Files +############## + +# install the system utils +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME login.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME profile.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME spawn.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME passwd.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME path.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME pathins.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME pathdel.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME map.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME mapdel.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME logout.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME slist.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME capture.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public RENAME endcap.exe) + +# and the minimal login utils +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login RENAME login.exe) +install(FILES net.exe DESTINATION ${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login RENAME map.exe) + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..12f3813 --- /dev/null +++ b/README.md @@ -0,0 +1,331 @@ +# mars_dosutils + +DOS client-side utilities for **mars_nwe** and compatible NetWare-style NCP environments. + +This repository contains the source for a small DOS utility suite built around a **single multi-call executable**, `net.exe`. The program can be used either as: + +- `net [args...]`, or +- a renamed executable such as `login.exe`, `map.exe`, `capture.exe`, or `logout.exe` + +That design is explicit in the command table in `net.c`, and the install rules also deploy the same binary under multiple command names. The original project documentation describes it as a “simple DOS-client program to allow standard NCP network actions, mainly for mars_nwe,” and also notes that it was still incomplete at the time of writing. + +## Features + +- Login and logout against an NCP server +- Password change support +- DOS drive mapping and unmapping +- Search-path management (`PATH`, `PATHINS`, `PATHDEL`) +- Printer capture and release (`CAPTURE`, `ENDCAP`) +- Scripted session setup through command files +- External program execution via `SPAWN` and `EXEC` +- Optional mars_nwe debug control hooks + +## Available commands + +The current command dispatcher includes these built-ins: + +- `LOGIN` +- `LOGOUT` +- `PASSWD` +- `PROFILE` +- `SPAWN` +- `EXEC` +- `MAP` +- `MAPDEL` +- `PATH` +- `PATHINS` +- `PATHDEL` +- `CAPTURE` +- `ENDCAP` +- `DEBUG` +- `ECHO` +- `CD` +- `TESTS` (developer/testing only) + +`SLIST` is present in the historical build/install metadata, but the command is disabled in the dispatcher and the provided `slist.c` is only a stub in this source snapshot. + +## How it works + +The program resolves the command from either: + +1. the executable name itself, or +2. the first command-line argument + +That means all of the following styles are valid: + +```text +NET LOGIN alice secret +NET MAP F:=SYS: +LOGIN.EXE alice secret +MAP.EXE F:=SYS: +CAPTURE.EXE LPT1 Q1 +``` + +This is one of the key design ideas of the project, and the original README specifically recommends copying or linking `net.exe` to `login.exe` for convenience. + +## Command reference + +### `LOGIN` + +Authenticate to an NCP server as a user. + +```text +LOGIN [-u] [user | user password] +``` + +- `-u` forces the older unencrypted login path. +- If no username is provided, the tool prompts interactively. +- If no password is provided, it prompts for one after the username. +- Successful login clears and rebuilds NetWare search-path state before running a local post-login script named `login` from the executable directory. + +### `LOGOUT` + +Log out from the current NCP session. + +The implementation also removes configured network search paths before performing logout. + +### `PASSWD` + +Change a user password. + +```text +PASSWD [user] +``` + +Notes: + +- If no username is supplied, the tool attempts to resolve the currently logged-in user. fileciteturn1file2L162-L190 +- The source comments note that password changes currently use the older unencrypted password-change call. + +### `PROFILE` + +Execute a command script. + +```text +PROFILE +``` + +This is a central part of the workflow. The command reader parses non-empty lines, ignores `#` comments, uppercases the command token, and dispatches it through the same internal command table used for direct invocation. `ECHO` is treated specially so the rest of the line is preserved as a single string. + +### `SPAWN` + +Run an external program and wait for it to finish. + +### `EXEC` + +Execute an external program using overlay-style execution. + +Both commands share the same implementation and differ only in whether they use `spawnvp(..., P_WAIT, ...)` or `execvp(...)`. + +### `MAP` + +List current drive mappings or map a DOS drive letter to a network path. + +```text +MAP [d:[=[path]]] +``` + +Examples: + +```text +MAP +MAP F:=SYS: +MAP H:=HOME: +``` + +The implementation lists active mappings, distinguishes local vs. redirected drives, and uses DOS-style drive letters. + +### `MAPDEL` + +Remove an existing drive mapping. + +```text +MAPDEL d: +``` + +Example: + +```text +MAPDEL F: +``` + +### `PATH` + +List or set a search-path entry. + +```text +PATH sn:[=[path]] +``` + +Where `sn` is `s1` through `s16`. The original documentation notes that this updates the path environment rather than directly creating a drive mapping. + +### `PATHINS` + +Insert a search-path entry instead of overwriting one. + +```text +PATHINS sn:[=[path]] +``` + +### `PATHDEL` + +Delete a search-path entry. + +```text +PATHDEL sn: +``` + +### `CAPTURE` + +List printer captures or redirect a local printer device to a queue. + +Typical usage: + +```text +CAPTURE [device [queue]] +``` + +Examples: + +```text +CAPTURE +CAPTURE LPT1 Q1 +CAPTURE PRN Q1 +``` + +`PRN` is normalized to `LPT1` internally. The command can also display existing captures. + +### `ENDCAP` + +Cancel a printer redirection. + +Typical usage: + +```text +ENDCAP device +``` + +Example: + +```text +ENDCAP LPT1 +``` + +### `DEBUG` + +Set mars_nwe debug levels for selected server-side modules. + +```text +DEBUG NCPSERV|NWCONN|NWBIND level +``` + +- `level` must be between `0` and `99`. +- The original docs say this requires `FUNC_17_02_IS_DEBUG` to be enabled in `mars_nwe/config.h`. + +### `ECHO` + +Print a string, mainly for use inside profile/login scripts. + +### `CD` + +Change the current DOS directory. It also adjusts the active drive if a drive-qualified path is supplied. + +### `TESTS` + +Internal developer test routines. Not intended as a regular end-user command. + +## Login script workflow + +A particularly important feature is the automatic execution of a file named `login` located beside the executable after a successful login. The historical README gives this example: + +```text +map f:=SYS: +map h:=home: +map z:=SYS:PUBLIC +path s16:=z:. +capture lpt1 q1 +profile h:\profile +``` + +This makes the tool suite useful not just for authentication, but for setting up a full DOS network session: drive mappings, search paths, printer capture, and then a user-specific profile script. + +## Building + +### Historical DOS build + +The included `makefile.bcc` is the primary historical build file and targets **Borland C / Borland tools** on DOS. + +Key settings from the makefile: + +- compiler: `bcc` +- linker: `bcc` +- assembler: `tasm` +- memory model: `-ml` +- define: `-Dmsdos` +- output: `net.exe` + +The object list includes: + +- `net.c` +- `tools.c` +- `netcall.c` +- `ncpcall.c` +- `login.c` +- `map.c` +- `slist.c` +- `nwcrypt.c` +- `nwdebug.c` +- `nwtests.c` +- `capture.c` +- `kern.asm` + + +### CMake status + +A `CMakeLists.txt` is present, but in this snapshot it is only a **partial modern build description**. It defines include paths, version-related macros, and install rules, while the actual `add_executable(...)` line is still commented out. That means it is better understood as packaging metadata than a ready-to-use complete build system. + +## Installation layout + +The CMake install rules deploy the same binary multiple times into `SYS/public`: + +- `net.exe` +- `login.exe` +- `profile.exe` +- `spawn.exe` +- `passwd.exe` +- `path.exe` +- `pathins.exe` +- `pathdel.exe` +- `map.exe` +- `mapdel.exe` +- `logout.exe` +- `slist.exe` +- `capture.exe` +- `endcap.exe` + +They also install minimal `login.exe` and `map.exe` copies into `SYS/login`. + +## Project status and limitations + +This is legacy DOS networking code from the mid-1990s, and a few caveats are worth keeping in mind: + +- The original README explicitly says the program was still incomplete. +- `SLIST` is not implemented in the provided source snapshot. +- Parts of the authentication and password-change path still rely on older unencrypted operations when the newer keyed flow is unavailable or disabled. +- The code is tightly coupled to DOS, IPX/NCP behavior, and mars_nwe-specific expectations. + +## Historical metadata + +From the included project metadata: + +- project: `mars_dosutils` +- version: `0.10` +- entered: `21-May-96` +- keywords: `mars_nwe`, `dos`, `dosemu` +- platforms: `DOS`, `DOSEMU` +- author/maintainer: Martin Stover + + +## License + +No standalone license file is included in the provided snapshot. The source files do contain copyright notices naming **Martin Stover**. Anyone planning to redistribute or modernize the project should verify licensing status before publishing derivative releases. diff --git a/doc b/doc/README similarity index 100% rename from doc rename to doc/README diff --git a/mars_dosutils.lsm b/doc/mars_dosutils.lsm similarity index 100% rename from mars_dosutils.lsm rename to doc/mars_dosutils.lsm diff --git a/opt/logo-small.png b/opt/logo-small.png new file mode 100644 index 0000000..92627a5 Binary files /dev/null and b/opt/logo-small.png differ diff --git a/opt/logo.png b/opt/logo.png new file mode 100644 index 0000000..349b620 Binary files /dev/null and b/opt/logo.png differ