mars_nwe-0.99.pl21

This commit is contained in:
Mario Fetka 2011-11-13 00:39:00 +01:00
parent b8ca2cf590
commit 79813c691a
9 changed files with 1200 additions and 39 deletions

2
README
View File

@ -86,7 +86,7 @@ Topics for the list:
- IPX routing and router daemons under Linux - IPX routing and router daemons under Linux
- and, last but not least, the LinWare daemon - and, last but not least, the LinWare daemon
You can subscribe to the list by sending command "add linware" in mail You can subscribe to the list by sending command "ADD linware" in mail
message body to address: "listserv@sh.cvut.cz". message body to address: "listserv@sh.cvut.cz".
Your list postings should be sent to address: "linware@sh.cvut.cz". Your list postings should be sent to address: "linware@sh.cvut.cz".

90
config.h Normal file
View File

@ -0,0 +1,90 @@
/* config.h: 22-Jun-00 */
/* some of this config is needed by make, others by cc */
#define DO_DEBUG 1 /* compile in debug code */
#define FUNC_17_02_IS_DEBUG 0 /* allow debugging with mars_dosutils */
#define DO_TESTING 0 /* set this to "1" to test only */
#if DO_TESTING
# define FILENAME_NW_INI "./nw.ini" /* full name of ini (conf) file */
# define PATHNAME_PROGS "." /* where to find the executables */
# define PATHNAME_BINDERY "." /* directory for bindery-files */
#else
# define FILENAME_NW_INI "/etc/nwserv.conf"
/* full name of ini (conf) file */
# define PATHNAME_PROGS "/usr/sbin" /* where to find the executables */
# define PATHNAME_BINDERY "/var/nwserv/db" /* directory for bindery-files */
#endif
#define PATHNAME_PIDFILES "/var/run" /* directory for 'pidfiles' */
/* ----- logging the logins via "mars_nwe" in utmp/wtmp ------------------ */
#define FILENAME_UTMP UTMP_FILE /* use "NULL" instead of UTMP_FILE */
/* to disable logging via utmp */
#define FILENAME_WTMP WTMP_FILE /* use "NULL" instead of WTMP_FILE */
/* to disable logging via wtmp */
#define NETWORK_SERIAL_NMBR 0x44444444L
/* serial number (4 byte) */
#define NETWORK_APPL_NMBR 0x2222 /* application number (2 byte) */
#define MAX_CONNECTIONS 50 /* max. number of simultaneous */
/* connections handled by mars_nwe */
/* !! NOTE !! */
/* If set > 255 some NCP calls will probably not work, try it with caution */
/* and you should apply examples/kpatch2.0.29 to kernels prior 2.0.32 */
#define IPX_DATA_GR_546 2 /* 0 = max. IPX Packets = 546 +30 Byte ( 512 Byte RWBuff) */
/* 1 = max. IPX packets = 1058 +30 Byte (1024 Byte RWBuff) */
/* 2 = max. IPX packets = 1470 +30 Byte (1444 Byte RWBuff) */
/* 3 = max. IPX packets = 4130 +30 Byte (4096 Byte RWBuff) */
#define ENABLE_BURSTMODE 0 /* 0 = disable burstmode, 1 = enable burstmode */
/* still NOT working correct !!!!! */
/* to get Burstmode really enabled, section '6' in conf-file */
/* must be set to a value > 1 (3.12 Server) */
/* and kernel-patch examples/kpatch2.0.29 should be used for */
/* kernels prior 2.0.32 */
#define USE_MMAP 1 /* use mmap systen call, not always best choice */
#if 0
#define SOCK_EXTERN 0x8005 /* creat socket for external access */
/* i.e. Xmarsmon from H. Buchholz */
#endif
/* <--------------------------------------------------------------------> */
#define MAX_NW_VOLS 10 /* max. number of mars_nwe-volumes */
#define MAX_FILE_HANDLES_CONN 255 /* max. number of open files per */
/* connection */
/* <--------------- new namespace services call -----------------------> */
#define MAX_DIR_BASE_ENTRIES 50 /* max. cached base entries per */
/* connection */
#define WITH_NAME_SPACE_CALLS 1 /* Namespace Calls are only minimal */
/* supported so far. */
/* To enable testing of them this */
/* entry must be changed to '1' and */
/* entry '6' in ini file should be set*/
/* to > '0', too. */
/* <--------------------------------------------------------------------> */
#define HANDLE_ALL_SAP_TYPS 1 /* if set to 0 only SAP-Typ 4 Servers */
/* will be put into routing table and */
/* if set to 1 all SAP Typs will be */
/* used. */
#define PERSISTENT_SYMLINKS 0 /* change to '1' for persistent symlinks */
/* main idea from Victor Khimenko */
/* still NOT working !! */
/* <--------------- next is for linux only ----------------------------> */
#define INTERNAL_RIP_SAP 1 /* use internal/own rip/sap routines */
#define SHADOW_PWD 0 /* change to '1' for shadow passwds */
#define QUOTA_SUPPORT 0 /* change to '1' for quota support */
/* for sending 'Request being serviced' replys, /lenz */
#define CALL_NWCONN_OVER_SOCKET 0

View File

@ -545,4 +545,6 @@ Erste 'oeffentliche' Version
(hint: Nagy Zoltan Mark) (hint: Nagy Zoltan Mark)
- 01-Sep-00:added real unix acces rights patch from Przemyslaw Czerpak - 01-Sep-00:added real unix acces rights patch from Przemyslaw Czerpak
<----- ^^^^^^^^^^ pl20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <----- ^^^^^^^^^^ pl20 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- 14-Jun-03:added patch from Marco Cavallini <m.cavallini@koansoftware.com>
Clear Connection Number (nwbind.c)
<----- ^^^^^^^^^^ pl21 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -1,5 +1,9 @@
Sorry, but this list will *never* be complete. Sorry, but this list will *never* be complete.
----------------------------------------------- -----------------------------------------------
Marco Cavallini <m.cavallini@koansoftware.com>
added Clear Connection
Michael Beddow <m.beddow@servelan.co.uk> Michael Beddow <m.beddow@servelan.co.uk>
translated doc for PIPE-FS translated doc for PIPE-FS

View File

@ -1,5 +1,5 @@
#if 0 #if 0
#makefile.unx 30-May-00 #makefile.unx 14-05-2003
#endif #endif
VPATH=$(V_VPATH) VPATH=$(V_VPATH)
@ -9,7 +9,7 @@ C=.c
V_H=0 V_H=0
V_L=99 V_L=99
P_L=20 P_L=21
#define D_P_L 1 #define D_P_L 1
DISTRIB=mars_nwe DISTRIB=mars_nwe

143
mk.li Executable file
View File

@ -0,0 +1,143 @@
#!/bin/sh
# mk.li 15-Dec-99
# please edit this file !
mk()
{
MYBASE=`pwd`;
ERRFILE=$TMP/`basename $MYBASE`.err;
rm -f $ERRFILE;
if [ $V_VPATH = '..' ] ; then
if [ ! -d $OBJDIR ] ; then mkdir $OBJDIR; fi
cd $OBJDIR;
fi
if $MAKE -f $V_VPATH/makefile.unx $@ 2>&1;then true;else kill -HUP $MK_PPID;fi | tee $ERRFILE
if [ $V_VPATH = '..' ] ; then
cd ..;
fi
if [ -f $ERRFILE ] ; then
chmod 666 $ERRFILE
fi
}
print_error()
{
echo ""
echo "The errors are also reported in '$ERRFILE'"
echo "============================================================="
}
TOLOWER='tr "[A-Z]" "[a-z]"'
UNX=`uname -s | $TOLOWER`
MASCHINE=`uname -m`
MK_PPID=$$
export MK_PPID
trap 'print_error; exit 1' 1
case $UNX in
linux)
V_VPATH=".."
OBJDIR="obj"
CC=cc
CPP="cc -E"
# CFLAGS="-pipe -O2 -fomit-frame-pointer"
# problems gcc2.5.8 ^^^^^^^^^^^^^^^^^^^^^
# CFLAGS="-pipe -Wall -Dsignal=sysv_signal"
CFLAGS="$RPM_OPT_FLAGS -pipe -Wall -D_GNU_SOURCE"
case $MASCHINE in
sparc)
HOSTCFLAGS="-DLINUX -DSPARC"
;;
*)
HOSTCFLAGS="-DLINUX"
;;
esac
if [ -f /usr/lib/libgdbm.a ] || [ -f /usr/lib/libgdbm.so ] ; then
NDBMLIB="-lgdbm"
else
NDBMLIB="-ldbm"
fi
if [ -f /usr/lib/libcrypt.so ] ; then
CRYPTLIB="-lcrypt"
else
CRYPTLIB=""
fi
if [ -f /usr/include/sys/quota.h ] ; then
HOSTCFLAGS="$HOSTCFLAGS -DQTAINSYS"
fi
NSLLIB=""
MAKE=make
TMP=/tmp
INSTALL=install
;;
########### SYSV (UnixWare) ##############
unix_sv)
V_VPATH="."
OBJDIR="."
CC=cc
CPP="cc -E"
CFLAGS=
HOSTCFLAGS=""
NDBMLIB="/usr/ucblib/libucb.a"
CRYPTLIB="-lgen"
NSLLIB="-lnsl"
MAKE=make
TMP=/tmp
INSTALL=/usr/ucb/install
;;
########## FreeBSD ############
# created by Boris Popov
freebsd)
V_VPATH=".."
OBJDIR="obj"
CC=gcc
CPP="gcc -E"
if [ "x$CFLAGS" = "x" ]; then
CFLAGS="native"
fi
HOSTCFLAGS="-DFREEBSD -DLINUX"
CRYPTLIB="-lcrypt -lipx"
NSLLIB=""
MAKE=make
TMP="./"
INSTALL="install -c"
;;
*) echo "mk.li: Unknown or not supported OS, probably you must set \$UNX"
;;
esac
## BEGIN try to pass around what the dbm is to the compiler (acli 19970709)
case "$NDBMLIB" in
*gdbm*)
HOSTCFLAGS="$HOSTCFLAGS -DUSE_GDBM"
;;
esac
## END
export CC
export CPP
if [ "X$CFLAGS" != "Xnative" ]; then
export CFLAGS
fi
export HOSTCFLAGS
export NDBMLIB
export CRYPTLIB
export NSLLIB
export TMP
export INSTALL
export V_VPATH
export OBJDIR
mk $@

889
nw.ini Normal file
View File

@ -0,0 +1,889 @@
#
# This is the configuration-file for "mars_nwe", a free netware-emulator
# for Linux.
#
# last changed: 01-Sep-00
# new volume flag 'x' for unix access rights (Przemyslaw Czerpak) 0.99.pl20
# comment out second printer and printserver entry in 0.99.pl20
# debug log section changed some values to '1' in 0.99.pl20
#
# !! section 31 : flags added in 0.99.pl18, but not used
# !! section 8 : new flags added in 0.99.pl18 !!
# !! section 9 : default directory/file umask changed in 0.99.pl9 !!
# !! section 46 : default attrib location changed in 0.99.pl9 !!
# !! section 5 : deleting of ipx devices/routes changed in 0.99.pl6 !!
# !! section 4 : automatic creation of ipx-interfaces changed in 0.98.pl9 !!
#
# since version 0.98.pl11:
# the most important options in config.h can now be altered in
# this file begin at section 60.
#
# Most configuration errors depend on section 4.
# !! Please read section 4 very carefully. !!
#
# This file specifies which Linux-resources (printers, users, directories)
# should be accessible to the DOS-clients via "mars_nwe". Furthermore
# some general parameters are configured here.
# Some options of "mars_nwe" can only be altered by editing the the file
# `config.h' and re-compiling "mars_nwe", please see there for more
# information.
# Syntax of this config-file:
# - everything after a "#" is treated as a comment (particularly
# it does never belong to the values themselves)
# - entries _must_ begin with a number, indicating the section
# they belong to
# - hexadecimal values are prepended by "0x"
#
# All examples are verbatim.
#
# The term "DOS-client" does not refer to the special operating-system
# "DOS" in _this_ file. "DOS-client" is only a synomym for all possible
# ipx-clients (it's choosen for the people who are confused by the
# meaning of "client" and "server").
# The "Linux-side" of the game is always the "mars_nwe"-server.
# =========================================================================
# Section 1: volumes (required)
#
# In this section you list all Linux-directories accessible via "mars_nwe".
#
# To be more precise: a mapping from Linux-directories to mars_nwe-volumes
# is done. (Volumes are the beasts you can map to drive letters under DOS
# using "map.exe").
#
# Linux-directory mars_nwe-volume map.exe DOS-Drive
# /var/local/nwe/SYS -------> SYS -------------> W:
#
# More than one entry is allowed in this section.
# The maximum number of volumes must be specified in `config.h'
# or in section 61 in this file.
#
# Please note that at least the volume "SYS" must be defined and it must
# contain the following sub-directories: LOGIN, PUBLIC, SYSTEM, MAIL.
# See the installation-instructions in the doc-directory for more infos
# and the info to section 16 (tests on startup) in this file.
#
# !! NOTE !!
# First defined volume should always named 'SYS'.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 1 VOLUMENAME DIRECTORY [OPTIONS] [UMASKDIR UMASKFILE]
#
# VOLUMENAME: the name of the mars_nwe-volume (max. 8 characters)
# DIRECTORY: the directory on your Linux-system associated with that
# volume; use the special name "~" to refer to the users
# individual home-directory.
# A directory entry like "~/tmp" also work since 0.99.pl3.
#
# If the netadmin wants to map the homedirectories with the MAP-Command to
# every user, he can do it in two variants:
# We suppose that the user test2 is logged in MARS_NWE. He has files
# earlier stored in his homedirectory /home/test2.
# In case of entry 1 in /etc/nwserv.conf (naturally amongst other entries)
# there are other results of the MAP-command.
#
# Variant 1 Variant 2
#
#DOS-Command MAP H:=MARS\HOMEDIR: MAP H:=MARS\HOMEDIR:
#
#Entry in /etc/nwserv.conf
# 1 HOMEDIR ~ k 1 HOMEDIR /home k
#
#Result of DIR *.* All files stored in All homedirs of the
# /home/test2 will shown. users will shown.
# Showing his own files
# it is a command like
# CD test2 and then
# dir *.* necessary.
#
# OPTIONS: none or some of the following characters (without a seperator)
# - Placeholder.
#
# Next two options control DOS and OS/2 namespace.
# i ignore case, handle mixing upper/lowercase filenames (slow)
# should only be used if you really need it.
# k use lowercase-filenames (if you don't set this,
# and you don't set 'i' all files _must_ be upper-case)
#
# m removable volume (e.g. cd-roms) or volumes, which
# should be remountable when mars_nwe is running.
# n (n)o fixed inodes. This volume do not have fixed inodes.
# e.g. DOS-Volumes, CD-ROMS. This flag is very important for
# attrib and trustee handling.
# o (lowercase o)
# volume has only one filesystem/device/namespace
# this is for filesystems with high inode > 0xFFFFFFF.
# because for namespace services mars_nwe normally use the
# first 4 bit of 32 bit inode for distinguish
# between several devices/namespaces for one volume.
# p "PIPE"-filesystem. All files are pipe commands.
# See `doc/PIPE-FS'.
# r volume is read-only and always reports "0 byte free"
# (this is intended for copies of CD-ROMs on harddisks)
# t volume has trustees.
# Real access is trustee rights + unix rights.
# Trustees are stored in extra directories,
# normally under /var/nwserv/trustees.
# Must only be used for volume which have fix inodes.
# A volume with trustees should never be renamed.
# For some more notes see 'doc/TRUSTEES'.
# x use unix access rights (for use with ACL)
# T volume has trustees & ignore the rights granted in UN*X filesystem
# exactly like option "t" except that the unix rights are not added
#
# additional Namespaces
# O (uppercase o)
# + OS/2 namespace (useful for Win95 clients, see doc/FAQS).
# N + NFS namespace (not really tested).
#
#
# UMASKDIR: default directory creat umask.
# UMASKFILE: default file creat umask.
# values are always octal, they overwrite standard
# section 9 values for this specific volume.
#
# -------------------------------------------------------------------------
#
# Examples:
# 1 SYS /var/local/nwe/SYS kt 711 600
# 1 CDROM /cdrom kmnor
# 1 HOME ~ k -1
# 1 HOMETMP ~/tmp kiO
# 1 PRIVAT ~/privat kO 700 600
# 1 WORLD /var/world kiO 777 666
# 1 FAXQ /var/spool/fax/faxqueue k
1 SYS /u3/SYS/ kt 711 600
# =========================================================================
# Section 2: servername (optional)
#
# The servername is the name under which this server will show up when
# using tools like "slist" (server-list).
#
# If you don't supply an entry for this section, the hostname of your
# Linux-machine will be converted to all-uppercase and used as the servername.
#
# -------------------------------------------------------------------------
# Syntax:
# 2 SERVERNAME
#
# SERVERNAME: a name for this nw-server
# -------------------------------------------------------------------------
#
# Example:
# 2 MARS # name of the server would be "MARS"
# =========================================================================
# Section 3: Number of the internal network (required)
#
# If have dealt with the TCP/IP-configuration of your Linux-Box, the term
# "ip-address" may be familiar to you. It's a numer that uniquely
# identifies your machine in the internet.
# As you might already expect, even the IPX-people use a unique number to
# identify each other. Addresses in the IPX-world always consist of a
# 4-byte "network-number" plus a 6-byte "node-number" (remember the
# ip-addresses also use 4-bytes).
#
# The numbering-rule for ipx-clients is easy: their "address" is the
# external-network of the server they are connected to plus the
# hardware-address of their own ethernet-card (6 byte). As a result of this
# rule, the clients can determine their address automatically (by listening
# to the server and looking at their own ethernet-hardware) and no
# configuration-files on the clients-side have to be maintained. (It would
# really be a nasty thing if you think of very many DOS-clients [remember:
# DOS is an OS where ordinary users can screw up the configuration files].)
#
# For internal routing purposes, a netware-server has an "internal network"
#
# As there is no organisation which regulates the use of network-numbers
# in the IPX-world, you have to run "slist" (under DOS or Linux) to
# determine a number that isn't already used by another server on your
# net. You better double-check and ask the other network administrators
# before using a random value because not all servers might be on-line when
# you "listen" to the net.
#
# A reasonable choice for the internal net-number of your mars_nwe-server
# could be the ip-address of your Linux-Box. It is reasonable because
# ip-addresse are unique and if every nw-administrator uses only this uniqe
# value, potential conflicts will be minimized. Of course this choice is
# no guarantee and it only works if your Linux-Box IP is well configured.
#
# Please note that you have to specify the address of your "internal
# ipx-network" in hexadecimal format (the leading "0x" indicates it).
#
#
# -------------------------------------------------------------------------
# Syntax:
# 3 INTERNAL_NET [NODE]
#
# INTERNAL_NET: the hexadecimal value of your "internal ipx-network". Use
# "0x0" or "auto" to refer to your ip-addresse (it's a kind of
# automagically setup)
# NODE: use "1" if you don't know what this entry is for (optional)
# -------------------------------------------------------------------------
#
# Example:
# 3 auto 1 # 'automatic' setup, use ip-number as internal net
3 auto
# =========================================================================
# Section 4: IPX-devices (strongly recommended)
#
# This section contains information for the ipx-router built into mars_nwe
# and/or the external program "nwrouted".
# Both processes exchange the ipx-packets between your machine and the rest
# of the world (in other words: their functionallity is essential). Of
# course, to use one of both is already sufficient.
#
# Note for people with other IPX/NCP servers on the net:
# - choose the same frame-type as the other servers use
# - make sure your network-number is not already in use by another
# server (see the output of "slist" under Linux or DOS)
#
# Under Linux, it is possible to let the kernel creat all ipx-devices
# automatically for you. This is only possible (and only makes sense then)
# if there are other IPX/NCP servers on the same net which are setup
# correctly. It can be switched on in section '5'.
# -------------------------------------------------------------------------
# Syntax:
# 4 NET_NUMBER DEVICE FRAME [TICKS]
#
# NET_NUMBER: this number is determined by the router of the physical
# network you're attached to. Use "0x0" to use the entry
# for all network number match.
#
# DEVICE: the network-interface associated with the NET_NUMBER. Use
# a "*" (star) to use this entry for all devices match.
#
# FRAME: the frame-type of the data-packets on your local network.
# Possible values are:
#
# ethernet_ii :best for mixed(ipx, ip) environments
# 802.2 :Novell uses this as default since 3.12
# 802.3 :older frame typ, some boot proms use it
# snap :normally not used
# token :for token ring cards
# auto :automatic detection of the frame-type used
# in your ipx-environment
#
# TICKS: the time data-packets need to get delivered over a
# certain interface. If your connection goes through several
# routers, the shortest path can be determined by summing up
# all ticks for every route and compare the results.
# (1 tick = 1/18th second), default=1
# Note: If ticks > 6 then the internal router handles
# RIP/SAP specially. (RIP/SAP filtering)
#
# !! NOTE !!
# Automatic detection in this section means that ipx-interfaces which
# are created by other instances than the server/router,
# e.g. pppd, ipppd or ipx_interface, will be detected and inserted/removed
# in internal device/routing table at runtime.
#
# Automatic kernel creation of interfaces can be switched on in section 5.
# -------------------------------------------------------------------------
#
# Examples:
# 4 0x10 eth0 802.3 1 # setup ethernet with frame 802.3
# 4 0xa20 arc0 802.3 1 # standard arcnet (TRXNET)
#
# 4 0x0 * AUTO 1 # auto detection of all ipx-interfaces.
# 4 0x0 eth0 AUTO 1 # auto detection of eth0 frames.
# 4 0x0 eth0 802.2 1 # auto detection of eth0 frame 802.2.
#
# Note: If ticks > 6 then the internal router handles RIP/SAP specially.
# (RIP/SAP filtering)
# 4 0x0 isdn0 802.3 7 # auto isdn interface with ethernet encap.
# 4 0x0 ippp0 AUTO 7 # auto ippp0 (isdn ppp) interface.
# 4 0x0 ppp0 AUTO 7 # auto detection of ppp0 interface.
4 0x22 eth0 ethernet_ii 1
4 0x0 * AUTO 1
# Section 5: special device flags
# =========================================================================
# Flags
# 0x1 do not remove by nwserv/nwrouted added routes and ipx-devices
# beyond the lifetime of the server or router.
# If this flag is not set then all by nwserv/nwrouted added
# ipx-devices/routes will be deleted when
# nwserv/nwrouted ends and if no ipx socket is still
# open. (default).
#
# 0x2 Switch on automatic kernel creation of ipx-interfaces.
# The automatic kernel creating of ipx-devices sometimes
# make trouble (Win95). It should only be used in the
# beginning or for testing !!
#
# 0x4 do remove ALL routes and ipx-devices
# beyond the lifetime of the server or router.
# If this flag is set then all ipx-devices/routes
# will be deleted when nwserv/nwrouted ends,
# without looking for open ipx sockets.
# This was the default prior mars_nwe 0.99.pl6 !
# This also do complete ipx reinit when starting
# mars_nwe.
# This was the default prior mars_nwe 0.99.pl9 !
#
#
#
# other flags may follow.
# value will be interpreted as hex value.
5 0x0
# =========================================================================
# Section 6: version-"spoofing"
#
# Some clients work better if the server tells that it is a 3.11 Server,
# although many calls (namespace services) of a real 3.11 Server are
# missing yet.
# -------------------------------------------------------------------------
# Syntax:
# 6 SERVER_VERSION [FLAGS]
#
# SERVER_VERSION: the version-number reported to DOS-clients
# 0 Version 2.15 (was default till version 0.98.pl7)
# 1 Version 3.11 (is default now)
# 2 Version 3.12
#
# If you want to use longfilenamesupport and/or namespace routines
# you should set this section to '1' or '2'
# And you should read doc/FAQS.
#
# FLAGS: some flags
# &1 enable burst mode connections.
# If you want to test Burst mode this flag must be set.
# and in config.h you must set ENABLE_BURSTMODE to 1.
#
# other flags may follow.
# value will be interpreted as hex value.
# -------------------------------------------------------------------------
#
6 1 0x0
# =========================================================================
# Section 7: password handling of DOS-clients (required)
#
# When changing your "mars_nwe"-password from a DOS-client, this client
# (think of "LOGIN.EXE", "SYSCON.EXE" or "SETPASS.EXE") can encrypt your
# password before sending it to the "mars_nwe"-server (this improves
# security a little bit).
# In this section you can enforce encryption of user-passwords or allow
# not-encrypted sending of passwords over the net.
#
#
# On the Linux-side, passwords will only be stored in encrypted format.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 7 Value
#
# Value:
# 0 enforce encryption of _all_ passwords by the DOS-client
# (default)
# 1 as "0", but allow the non-encrypted version of the
# "change password"-routine.
# 7 allow all non-encrypted stuff but no empty nwe passwords.
# 8 allow all non-encrypted stuff and also allow empty
# nwe-passwords.
# 9 use all non-encryted calls + "get crypt key" will always fail
# so the login program will use the old unencryted calls.
# this will *not* work with all clients !! (OS2/client)
# -------------------------------------------------------------------------
7 0
# Section 8: special login/logout/security and other flags.
# =========================================================================
# Flags
# 0x1 allow changing dir/accessing other files than login/*
# when not logged in, if the client supports it.
# ( this was standard till mars_nwe-0.98.pl4 )
#
# 0x2 switch on strange compatibility mode for opening files.
# If an opencall do an open for writing but
# the file is readonly then this call will not fail
# but open the file readonly.
#
# 0x4 allow the rename file call (NCP function 0x45)
# renaming of directories.
# normally the rename file call returns an error if this
# routine is used for renaming directories.
#
# 0x8 ignore station/time restrictions for supervisor.
#
# 0x10 allows deleting a file even if the file is opened by
# other process.
# ( this was standard before mars_nwe-0.99.pl0 )
#
# 0x20 store file base entries for later use.
# Normally only directory base entries are stored.
# necessary if using ncpfs as mars_nwe client.
#
# 0x40 limit's volume's free space info to 2 GB.
# in some volume info calls.
# some DOS clients need it.
#
# 0x80 allows renaming a file even if the file is opened by
# other process.
# ( this was standard before mars_nwe-0.99.pl18 )
#
# 0x100 not used yet.
#
# 0x200 needed for direct int17 printing on NETX clients
# (patch from Przemyslaw Czerpak)
#
# other flags may follow.
# value will be interpreted as hex value.
8 0x0
# Section 9: Standard creat mode for creating directories and files.
# =========================================================================
#
# mkdir mode (creat mode directories), creat mode files
# values are always interpreted as octal values !
# if 0 is specified the standard umask will be used.
# if -1 is specified for directories the st_mode of parent directory
# will be used.
# Volumes depended values can be set in section 1.
# 9 -1 0640
#
9 0751 0640
# Section 10: UID and GID with minimal rights
# =========================================================================
#
# When loading the netware-drivers in the "autoexec.bat" of your
# DOS-client, you automatically "attach" to a netware-server.
# As a result, a new drive-letter is accessible under DOS, usally
# containing the programs "login.exe" and "slist.exe".
# Because you haven't logged in, nothing else of the netware-server
# will be visible to you. All actions requested from the DOS-client
# will be done with the following UID and GID on the Linux-side in this
# case.
# To achieve some level of security, the user/group asscociated with
# the UID and GID should only have _read_ rights on the files visible,
# _nothing_ else.
#
# On most Linux-systems, there is a user and group "nobody" defined in
# `/etc/passwd' and `/etc/group'. Use the number of that user/group
# for the following entries.
#
# -------------------------------------------------------------------------
# Syntax:
# 10 GID
# 11 UID
#
# GID numeric number of the group
# UID numeric number of the user
# -------------------------------------------------------------------------
#
# Example:
# 10 65534
# 11 65534
10 65534
11 65534
# =========================================================================
# Section 12: supervisor-login (required)
#
# The "supervisor" of a nw-server is much like "root" on the Linux-side.
#
# Specify a Linux-user that should be mapped to the supervisor of this
# mars_nwe-server.
# To improve security, don't use "root" for this purpose but create a
# seperate administrative account (under Linux) called "nw-adm" or similar.
#
# The nw-user defined in this section will have the mars_nwe internal UID
# "1" (remember even under Linux "root" must have the special UID "0"), so
# it is not possible to define a supervisor in section 13 (the users
# defined there will get random UIDs).
# You _can_ define a user with name "SUPERVISOR" in section 13, but he
# won't really be the "local god" on the "mars_nwe"-server.
# And of course you _can_ define a supervisor with name "GOD" or "ROOT"
# in _this_ section, which would only break the traditional naming-scheme
# of the netware-world.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 12 NW_LOGIN LINUX_LOGIN [PASSWORD]
#
# NW_LOGIN: the login-name for the "mars_nwe"-server (traditionally,
# this is "SUPERVISOR")
# LINUX_LOGIN: the account on the Linux-side associated with the NW_LOGIN
# PASSWORD: the password for the NW_LOGIN. It must be clear-text but
# will be encrypted and permanent stored in the
# bindery-files, so it (the password or the whole section, at
# your option) can be deleted after the first start of
# "nwserv".
#
# Make sure this file is not world-readable as long
# as the password stands here.
#
# If you leave this field blank when starting "mars_nwe" the
# first time, the supervisor-login will be completely
# disabled. In other words: there is no way to supply the
# supervisor with no password ("null-password").
# -------------------------------------------------------------------------
#
# Example:
# 12 SUPERVISOR nw-adm top-secret
12 SUPERVISOR root
# =========================================================================
# Section 13: user-logins (optional)
#
# You can provide mappings from the regular login-names of your Linux-Box
# to "mars_nwe"-logins here.
# Every "mars_nwe"-user _must_ have a login-name on the Linux side (even
# if he can't log in into the account associated with the login-name,
# because you locked it with a "*") in order to "own" files.
# If you specify a Linux-login that doesn't exist (one could think of a
# typo), the user will only have the minimal rights defined in
# sections 10/11.
#
# You may also map different mars_nwe user to the same unix user.
#
# See section 12 for a description of the syntax.
#
# Unlike in section 12, you can define users with no password.
# If you explizit want to set 'no password' here then use
# a '-' sign as password.
# -------------------------------------------------------------------------
# Syntax:
# 13 NW_LOGIN [LINUX_LOGIN] [PASSWORD] [FLAGS]
#
# FLAGS must be a hex value begin with 0x
# the only FLAG value in the moment is 0x1 for 'fixed passwords'
# which cannot be changed by user.
# Example:
# 13 MARTIN
# 13 MARTIN martin
# 13 DAREK martin
# 13 COMMON common gast 0x1 # no password change by user.
# 13 COMMON common 0x1 # syntax is allowed too.
13 GUEST nobody - 0x1
# Section 14: currently not used
# =========================================================================
# Section 15: automatic mapping of logins (decision required)
#
# If you have a large number of accounts on your Linux-machine, you may
# want to map all Linux-logins automatically to "mars_nwe"-logins.
#
# At this stage this section is only a quick hack to make life a bit
# easier for the administrator.
#
# WARNING: as there is no algorithm to convert the encrypted
# "Linux-passwords" into the encrypted format used by the DOS-clients (and
# therefore "mars_nwe"), you have to supply a common password for all
# automatically mapped users. This is a big security concern and you
# should never make this common password public (and, of course you
# should choose a sufficient "secure" (read: difficult) password).
# Type the common password to grant access to the users login and the
# command "setpass" instead of telling the password to the user.
#
# Only those Linux-logins will handled automatically that don't have a
# "x" or "*" as their encrypted password.
#
#
# -------------------------------------------------------------------------
# Syntax:
# 15 FLAG DEFAULT_PASSWORD
#
# FLAG:
# 0 DON'T map the Linux-logins automatically to
# "mars_nwe"-logins (default)
# 1 YES, DO the automatic mapping and provide every login
# created this way with the common password given with
# "DEFAULT_PASSWORD"
# 99 re-read the logins from /etc/passwd and overwrite even the
# already existing logins from the bindery (this will also
# reset all the passwords to "DEFAULT_PASSWORD")
#
# DEFAULT_PASSWORD: the common password for all automatically created
# logins (only needed if FLAG is not "0"); everything about
# password in section 12 applies to this.
# -------------------------------------------------------------------------
15 0 top-secret
# =========================================================================
# Section 16: Tests on startup
#
# If you want some sanity checks at startup, set this flag to > 0.
# "mars_nwe" will try to create/change missing directories:
# SYS:LOGIN, SYS:MAIL, SYS:MAIL/XXX, SYS:PUBLIC, SYS:SYSTEM ...
# (with the "right" permissions, of course) if you enable this.
# should also be enabled when you use a new mars_nwe version.
# Disabling this test only spares little time when starting mars_nwe.
# some values:
# 1 few important tests.
# 2 also check/compress bindery.
16 1
# Section 17: some bindery / user related flags.
# =========================================================================
# Flags
# 0x1 give all user an empty! login script, if they do not
# already have one. Is interpreted by test routines
# which run if section 16 is set and nwserv starts
# or got a SIGHUP. ( nwserv -h )
#
# other flags may follow.
# value will be interpreted as hex value.
17 0x0
# Section 18: some queue handling related flags.
# =========================================================================
# Flags
# 0x1 always unset (disable) the print banner flag.
#
# other flags may follow.
# value will be interpreted as hex value.
18 0x0
# Section 19-20: currently not used
# =========================================================================
# Section 21: print queues (optional)
#
# Which of the printers connected to your Linux-box should be accessible
# from the DOS-clients?
# Multiple entries are allowed.
#
# -------------------------------------------------------------------------
# Syntax:
# 21 QUEUE_NAME [QUEUE_DIR] [PRINT_COMMAND]
#
# QUEUE_NAME: the name of the print queue on client-side (to make it
# perfectly clear: _not_ the Linux-queue)
# QUEUE_DIR: spooling directory for the print-jobs.
# The name is the DOS (not Unix) name of this
# directory.
# It must be placed on the first defined volume.
# (standard name is SYS volume).
# Then it will be created at starttime of mars_nwe.
# It must exist before printing.
# (_not_ the spooling-directories of the Linux-lpd)
# NOTE !
# A '-' sign as QUEUE_DIR has special meaning of
# 'standard' queuedir name. ( SYS:\SYSTEM\queueid.QDR )
#
# PRINT_COMMAND: command used for serving the print-jobs under Linux
# (see "man lpr" and "man magicfilter" for details)
# if the '!' is last parameter of command then
# the queue-packet fields 'banner_user_name'
# and 'banner_file_name' will be added to the
# command as last parameters.
# NOTE !
# If a print command is not specified the job can/must be
# printed by any print server.
# (e.g. pserver (ncpfs utils) or external printserver)
#
# Examples:
# 21 LASER - lpr -Plaser
# 21 OCTOPUSS
# 21 FAXPRINT - /usr/bin/psfaxprn /var/spool/fax/faxqueue
# -------------------------------------------------------------------------
21 LP - lpr -
#21 LP_PS
# =========================================================================
# Section 22: print server entries (optional)
# adds printserver entries into bindery
# e.g. to enable printing with ncpfs pserver
# -------------------------------------------------------------------------
# Syntax:
# 22 PSERVER_NAME QUEUE_NAME [FLAGS]
#
# FLAGS:
# 1 Let PSERVER_NAME be a 'normal' user (type 1).
# Used for simple qserver which works under 'normal' user login.
#
# Examples:
# 22 PS1 OCTOPUSS
#22 PS_NWE LP_PS 1
# =========================================================================
# Section 30: Burst mode values (optional)
#
# -------------------------------------------------------------------------
# Syntax:
# 30 MAX_BURST_READ_BUF MAX_BURST_WRITE_BUF
# default is 0x2000 0x2000
# Examples:
# 30 0x2000 0x2000
# =========================================================================
# Section 31: not used yet
# =========================================================================
# Flags not used yet
#
31 0x0
# =========================================================================
# Section 40ff: Some pathes (optional)
#
# -------------------------------------------------------------------------
# 40 = path for vol/dev/inode->path cache, needed for client-32,namespace
40 /var/spool/nwserv/.volcache
# 41 = path for share/lock files
41 /var/spool/nwserv/.locks
# 42 = path for spool dir, e.g. internal print queue handling
42 /var/spool/nwserv
#
#
# 45 = path for bindery file's
45 /var/nwserv/db
# 46 = path for attribute handling
46 /var/nwserv/attrib
# 47 = path for trustee handling
47 /var/nwserv/trustees
# =========================================================================
# Section 50: Conversion tables by Victor Khimenko <khim@mccme.ru>
# Tables for DOS->Unix names translation & upper/lowercase translations
# For more information see doc/README.NLS
# some examples files exist in the examples directory.
# Conversation file must include 4 tables a 256 byte.
# 0 = dos2unix
# 1 = unix2dos
# 2 = down2up 'dosname'
# 3 = up2down 'dosname'
# -------------------------------------------------------------------------
# Syntax:
# 50 Filename of conversation file.
#
# Examples:
# 50 /etc/nwserv.cnv
# Changing defaults from config.h
# more information in config.h
# 60 10 # MAX_CONNECTIONS
# 61 10 # MAX_NW_VOLS
# 63 50 # MAX_DIR_BASE_ENTRIES
# 68 1 # USE_MMAP (use mmap=1, no mmap=0)
# 69 1 # HANDLE_ALL_SAP_TYPS (all sap typs=1, only typ 4=0)
# 70 0x44444444 # NETWORK_SERIAL_NMBR (4 byte)
# 71 0x2222 # NETWORK_APPL_NMBR (2 byte)
# --------------------------------------------------------
# You usally don't want to change anything below this line
# --------------------------------------------------------
# Sections 80-99: some more constants
# 80 50 # max_dir_search_handles (namspace.c)
# Sections 100-106: amount of debug-information
#
# FLAG:
# 0 no debug messages
# 1 errors and notes are reported
# 99 maximum debug levels
100 0 # debug IPX KERNEL (0 | 1)
101 1 # debug NWSERV
102 1 # debug NCPSERV
103 1 # debug NWCONN
104 0 # debug (start) NWCLIENT, should *always* be '0' !
105 1 # debug NWBIND
106 1 # debug NWROUTED
# Sections 200-202: logging of "nwserv"
#
200 1 # 0 = no logfile and dont daemonize nwserv/nwrouted
# 1 = daemonize nwserv/nwrouted and use logfile
201 /var/log/nw.log # filename of logfile
#201 syslog # if filename == syslog then syslogd will be used for
# all messages
202 0x1 # flag in hex notation
# 0x0=append all messages to logfile.
# & 0x1=creat new logfile instead of appending.
#202 0x3 # & 0x2=use syslogd for error messages instead of logfile.
# Sections 210,211: timing
210 10 # 1 .. 600 (default 10) seconds after server
# really goes down after a down command
211 60 # 10 .. 600 (default 60) broadcasts every x seconds
# Sections 300-302: loging of routing-information
300 1 # > 0 print routing info to file every x broadcasts.
# ( normally minutes )
301 /var/log/nw.routes # filename of logfile
302 0x1 # flags will be interpreted as hex value.
# 0 = append to this file
# & 0x1 = creat new routing info file
# & 0x2 = split info into several files
# (extensions = .1, .2, .3 ... )
# Section 310: watchdogs
310 7 # send wdog's only to device net < x ticks.
# 0 = always send wdogs. < 0 = never send wdogs
# Section 400:
# station file for special handling of stations.
400 /etc/nwserv.stations # for syntax see file in the examples directory.
# Section 401: nearest server
#
# for special handling of the 'get nearest server request'.
401 0 # 0 = ignore entry 400, get nearest response always enabled.
# 1 = 400 are excludes, get nearest response normally enabled.
# 2 = 400 are includes, get nearest response normally disabled.
# Section 402: station connect restrictions
#
# for special handling of the 'creat connection' (attach) call.
402 0 # 0 = ignore entry 400, create connection always enabled.
# 1 = 400 are excludes, create connection normally enabled.
# 2 = 400 are includes, create connection normally disabled.

View File

@ -1,5 +1,7 @@
/* nwbind.c */ /* nwbind.c */
#define REVISION_DATE "14-Aug-00"
#define REVISION_DATE "14-Jun-03" // (M@K)
/* NCP Bindery SUB-SERVER */ /* NCP Bindery SUB-SERVER */
/* authentification and some message and queue handling */ /* authentification and some message and queue handling */
@ -25,6 +27,7 @@
* mst:25-Apr-00: added login control routines from Paolo Prandini * mst:25-Apr-00: added login control routines from Paolo Prandini
* mst:25-Apr-00: added simple example for getting nwconn data * mst:25-Apr-00: added simple example for getting nwconn data
* mst:14-Aug-00: added patch from Poalo Prandini * mst:14-Aug-00: added patch from Poalo Prandini
* mck:14-Jun-2003: added patch from Marco Cavallini (M@K)
* *
*/ */
@ -53,6 +56,10 @@ static ipxAddr_t from_addr; /* actual calling address */
static NCPREQUEST *ncprequest = (NCPREQUEST*)&ipx_in_data; static NCPREQUEST *ncprequest = (NCPREQUEST*)&ipx_in_data;
static int server_goes_down=0; static int server_goes_down=0;
static void nwconn_callback(int connection, char *data, int data_len, int completition) ;
static void write_to_nwserv(int what, int connection, int mode, static void write_to_nwserv(int what, int connection, int mode,
char *data, int size) char *data, int size)
{ {
@ -512,9 +519,10 @@ static void handle_fxx(int gelen, int func)
rdata = requestdata+3; rdata = requestdata+3;
} }
MDEBUG(D_BIND_REQ, { // MDEBUG(D_BIND_REQ,
{
int j = gelen - sizeof(NCPREQUEST); int j = gelen - sizeof(NCPREQUEST);
XDPRINTF((1, 0, "NCP 0x%x REQUEST:ufunc:0x%x", func, ufunc)); XDPRINTF((1, 0, "KNCP 0x%x REQUEST:ufunc:0x%x", func, ufunc));
if (j > 0){ if (j > 0){
uint8 *p=requestdata; uint8 *p=requestdata;
XDPRINTF((1, 2, "len %d, DATA:", j)); XDPRINTF((1, 2, "len %d, DATA:", j));
@ -525,7 +533,8 @@ static void handle_fxx(int gelen, int func)
} }
XDPRINTF((1, 1, NULL)); XDPRINTF((1, 1, NULL));
} }
}) }
// )
if (0x15 == func) { if (0x15 == func) {
switch (ufunc) { /* Messages */ switch (ufunc) { /* Messages */
@ -1731,19 +1740,21 @@ static void handle_fxx(int gelen, int func)
case 0xc8 : { /* CHECK CONSOLE PRIVILEGES */ case 0xc8 : { /* CHECK CONSOLE PRIVILEGES */
/* to use fileserver service functions */ /* to use fileserver service functions */
XDPRINTF((1, 0, "MAKE BETTER: CHECK CONSOLE PRIV")); XDPRINTF((1, 0, "MAKE BETTER: CHECK CONSOLE PRIV (M@K)"));
/* !!!!!! TODO completition=0xc6 (no rights) */ /* !!!!!! TODO completition=0xc6 (no rights) */
if (!(act_c->id_flags&1)) if (!(act_c->id_flags&1))
completition=0xc6; /* no rights */ completition=0; /* no rights (M@K) */
// completition=0xc6; /* no rights */
} break; } break;
case 0xc9 : { /* GET FILE SERVER DESCRIPTION STRINGs */ case 0xc9 : { /* GET FILE SERVER DESCRIPTION STRINGs */
char *company = "Mars :-)"; char *company = "KoanSoftware.com";
char *revision = "Version %d.%d.pl%d"; char *revision = "Version %d.%d.pl%d [KOAN]"; // (M@K)
char *revision_date = REVISION_DATE; char *revision_date = REVISION_DATE;
char *copyright = "(C)opyright Martin Stover"; char *copyright = "(C)M.Stover";
int k=strlen(company)+1; int k=strlen(company)+1;
int l; int l;
memset(responsedata, 0, 512); memset(responsedata, 0, 512);
strcpy(responsedata, company); strcpy(responsedata, company);
l = 1 + sprintf(responsedata+k, revision, l = 1 + sprintf(responsedata+k, revision,
@ -1793,6 +1804,25 @@ static void handle_fxx(int gelen, int func)
} }
break; break;
case 0xd2 : { /* Clear Connection Number (M@K) */
/* 14-Jun-2003 by Marco Cavallini */
uint8 conxnumber = *rdata - 1 ; // pointer to NCPREQUEST structure (receive aligned to 1 and we must align to 0)
char buf[255] ;
CONNECTION *cn=&connections[conxnumber];
sprintf(buf, "(M@K) Clear Connection Number = %d <==========", conxnumber);
XDPRINTF((1, 0, buf));
if (cn->active) {
strmaxcpy(cn->message, "MARS_NWE has killed your connection", 58);
sprintf(buf, "(M@K) KILL = Conn=%d PID=%d", conxnumber, cn->pid_nwconn);
XDPRINTF((1, 0, buf));
nwserv_handle_msg(conxnumber+1); // send message to the client
if (cn->pid_nwconn > -1)
kill(cn->pid_nwconn, SIGTERM); // kill it using brute force (M@K)
}
} break;
case 0xd3 : { /* down File Server */ case 0xd3 : { /* down File Server */
internal_act=1; internal_act=1;
if (HAVE_SU_RIGHTS(act_c->object_id)) { /* only SUPERVISOR */ if (HAVE_SU_RIGHTS(act_c->object_id)) { /* only SUPERVISOR */

View File

@ -1238,6 +1238,9 @@ static int server_is_down=0;
static int usage(char *prog) static int usage(char *prog)
{ {
fprintf(stderr, "============== mars_nwe by Koan ===============\n\n") ; // (M@)
#if IN_NWROUTED || INTERNAL_RIP_SAP #if IN_NWROUTED || INTERNAL_RIP_SAP
fprintf(stderr, "usage:\t%s [-V|-h|-f|-u|-k[q]|y]\n", prog); fprintf(stderr, "usage:\t%s [-V|-h|-f|-u|-k[q]|y]\n", prog);
fprintf(stderr, "or:\t%s -a device frame netnum\n", prog); fprintf(stderr, "or:\t%s -a device frame netnum\n", prog);
@ -1327,7 +1330,7 @@ int main(int argc, char **argv)
case 'f' : init_mode = 5; break; case 'f' : init_mode = 5; break;
case 'q' : if (init_mode == 2) init_mode=4; break; case 'q' : if (init_mode == 2) init_mode=4; break;
case 'v' : case 'v' :
case 'V' : fprintf(stderr, "\n%s:Version %d.%d.pl%d\n", case 'V' : fprintf(stderr, "\n%s:Version %d.%d.pl%d [ KOAN ]\n",
argv[0], _VERS_H_, _VERS_L_, _VERS_P_ ); argv[0], _VERS_H_, _VERS_L_, _VERS_P_ );
return(0); return(0);
default : return(usage(argv[0])); default : return(usage(argv[0]));