mars_nwe-0.96.pl09
This commit is contained in:
parent
28334ea9f1
commit
fc81c57450
7
CHANGES
7
CHANGES
@ -1,5 +1,5 @@
|
|||||||
Sorry, this is in German only. :-(
|
Sorry, this is in German only. :-(
|
||||||
Aenderungen in mars_nwe bis zum : 08-Feb-96
|
Aenderungen in mars_nwe bis zum : 10-Feb-96
|
||||||
--------------------------------
|
--------------------------------
|
||||||
Erste 'oeffentliche' Version
|
Erste 'oeffentliche' Version
|
||||||
^^^^^^^^^^ VERSION 0.94 ^^^^^^^^
|
^^^^^^^^^^ VERSION 0.94 ^^^^^^^^
|
||||||
@ -78,6 +78,11 @@ Erste 'oeffentliche' Version
|
|||||||
- Schalter 'm' fuer removable volumes ( z.B. CDROMS )
|
- Schalter 'm' fuer removable volumes ( z.B. CDROMS )
|
||||||
eingebaut. (Lauri Tischler)
|
eingebaut. (Lauri Tischler)
|
||||||
- func 0x17, ufunc 0x15 eingebaut.
|
- func 0x17, ufunc 0x15 eingebaut.
|
||||||
|
- Makefile und mk.li abgeaendert. Laeuft nun auf der USL auch
|
||||||
|
mit Standardmake.
|
||||||
|
- Passwort Strategy erweitert. Nun ist es auch moeglich ueber
|
||||||
|
entry '7' in der ini Datei System-Passwoerter zu verwenden.
|
||||||
|
Es werden dann unencryted Passwoerter verwendet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
12
Makefile
12
Makefile
@ -1,7 +1,12 @@
|
|||||||
# Makefile mars_nwe: 31-Jan-96
|
# Makefile mars_nwe: 10-Feb-96
|
||||||
|
|
||||||
VPATH=
|
VPATH=
|
||||||
|
|
||||||
|
.EXPORT_ALL_VARIABLES:
|
||||||
|
# defaults, can be overwritten in mk.li
|
||||||
|
V_VPATH=..
|
||||||
|
OBJDIR=obj
|
||||||
|
|
||||||
all: rmeflag mk.li config.h nw.ini
|
all: rmeflag mk.li config.h nw.ini
|
||||||
@if [ -r .eflag ] ; then \
|
@if [ -r .eflag ] ; then \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
@ -33,6 +38,9 @@ clean: mk.li nw.ini
|
|||||||
distrib: mk.li nw.ini
|
distrib: mk.li nw.ini
|
||||||
./mk.li $@
|
./mk.li $@
|
||||||
|
|
||||||
|
diff:
|
||||||
|
./mk.li $@
|
||||||
|
|
||||||
mk.li: examples/mk.li
|
mk.li: examples/mk.li
|
||||||
@if [ -r $@ ] ; then \
|
@if [ -r $@ ] ; then \
|
||||||
cp -f $@ $@.org && ( \
|
cp -f $@ $@.org && ( \
|
||||||
@ -44,7 +52,7 @@ mk.li: examples/mk.li
|
|||||||
echo "" ) ; fi
|
echo "" ) ; fi
|
||||||
@ echo ""
|
@ echo ""
|
||||||
@ echo ""
|
@ echo ""
|
||||||
@ - cp -i examples/$@ .
|
@- cp -i examples/$@ .
|
||||||
@ touch -c $@
|
@ touch -c $@
|
||||||
@ echo ""
|
@ echo ""
|
||||||
@ echo "********************************************************"
|
@ echo "********************************************************"
|
||||||
|
38
NEWS
Normal file
38
NEWS
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
------13-Feb-96---------
|
||||||
|
New alternative password strategy in mars_nwe:
|
||||||
|
There is an new entry '7' in ini/conf file.
|
||||||
|
|
||||||
|
The user has now 4 ways to choose.
|
||||||
|
1. entry '7' = '0'.
|
||||||
|
maximal security by forbid unencryted password calls,
|
||||||
|
but till now no chance to modify passwords with client requests.
|
||||||
|
|
||||||
|
2. entry '7' = '1'.
|
||||||
|
good security by only allow unencryted change password call.
|
||||||
|
Here the user can use an old SETPAS or SYSCON program which
|
||||||
|
make the changing of passwords with unencryted calls.
|
||||||
|
|
||||||
|
3. entry '7' = '8'.
|
||||||
|
less security by allow all unencryted password calls.
|
||||||
|
Like 2. but the user can also use old LOGIN program
|
||||||
|
with unencryted passwords. Mars_nwe will allow password
|
||||||
|
from the bindery and system-user-password.
|
||||||
|
|
||||||
|
4. entry '7' = '9'.
|
||||||
|
Like 3. but in additional the routine 0x17 ufunc=0x17
|
||||||
|
(get crypt key) will allways fail.
|
||||||
|
So the LOGIN.EXE and SYSCON.EXE means that this is an old server
|
||||||
|
with only unencrypted passwords and will switch to the old unencryted
|
||||||
|
calls.
|
||||||
|
|
||||||
|
With the unencryted calls the clear passwords will go through the
|
||||||
|
wire, so mars_nwe can compare the passwords as well with the
|
||||||
|
stored bindery passwords as with the system passwords (crypt).
|
||||||
|
But there is a little hint. Passwords will ever be uppercase sent
|
||||||
|
from LOGIN.EXE or SYSCON.EXE
|
||||||
|
Mars_nwe makes three tries.
|
||||||
|
First try is with bindery-password, second try is with system
|
||||||
|
user-password and third try is making the password downcase and
|
||||||
|
compare with systen-user-password again.
|
||||||
|
When a user changes his password, only the bindery password will
|
||||||
|
be changed.
|
5
emutli.h
5
emutli.h
@ -17,6 +17,9 @@
|
|||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef _EMUTLI_H_
|
||||||
|
#define _EMUTLI_H_
|
||||||
|
|
||||||
#include <linux/ipx.h>
|
#include <linux/ipx.h>
|
||||||
|
|
||||||
typedef unsigned char uint8;
|
typedef unsigned char uint8;
|
||||||
@ -130,5 +133,5 @@ extern void set_emu_tli(void);
|
|||||||
#define IPX_FRAME_ETHERII IPX_RT_BLUEBOOK
|
#define IPX_FRAME_ETHERII IPX_RT_BLUEBOOK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* config.h: 08-Feb-96 */
|
/* config.h: 08-Feb-96 */
|
||||||
/* some of this config is needed by make, others by cc */
|
/* some of this config is needed by make, others by cc */
|
||||||
|
#define DO_DEBUG 1 /* Debugging einschalten */
|
||||||
#define FILENAME_NW_INI "/etc/nwserv.conf" /* full name of ini (conf) file */
|
#define FILENAME_NW_INI "/etc/nwserv.conf" /* full name of ini (conf) file */
|
||||||
#define PATHNAME_PROGS "/sbin" /* path location of progs */
|
#define PATHNAME_PROGS "/sbin" /* path location of progs */
|
||||||
#define PATHNAME_BINDERY "/etc" /* path location of bindery */
|
#define PATHNAME_BINDERY "/etc" /* path location of bindery */
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# mk.li 30-Jan-96 ###
|
# mk.li 10-Feb-96 ###
|
||||||
# please edit this file !
|
# please edit this file !
|
||||||
|
|
||||||
mk()
|
mk()
|
||||||
@ -7,10 +7,14 @@ mk()
|
|||||||
MYBASE=`pwd`;
|
MYBASE=`pwd`;
|
||||||
ERRFILE=$TMP/`basename $MYBASE`.err;
|
ERRFILE=$TMP/`basename $MYBASE`.err;
|
||||||
rm -f $ERRFILE;
|
rm -f $ERRFILE;
|
||||||
if [ ! -d obj ] ; then mkdir obj; fi
|
if [ $V_VPATH = '..' ] ; then
|
||||||
cd obj;
|
if [ ! -d $OBJDIR ] ; then mkdir $OBJDIR; fi
|
||||||
$MAKE -f ../makefile.unx $@ 2>&1 | tee $ERRFILE;
|
cd $OBJDIR;
|
||||||
|
fi
|
||||||
|
$MAKE -f $V_VPATH/makefile.unx $@ 2>&1 | tee $ERRFILE;
|
||||||
|
if [ $V_VPATH = '..' ] ; then
|
||||||
cd ..;
|
cd ..;
|
||||||
|
fi
|
||||||
chmod 666 $ERRFILE
|
chmod 666 $ERRFILE
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,13 +23,16 @@ UNX=`uname -s | $TOLOWER`
|
|||||||
|
|
||||||
case $UNX in
|
case $UNX in
|
||||||
linux)
|
linux)
|
||||||
CC=cc;
|
V_VPATH=".."
|
||||||
CCP="cc -E";
|
OBJDIR="obj"
|
||||||
|
CC=cc
|
||||||
|
CPP="cc -E"
|
||||||
# CFLAGS="-pipe -O2 -fomit-frame-pointer"
|
# CFLAGS="-pipe -O2 -fomit-frame-pointer"
|
||||||
# problems gcc2.5.8 ^^^^^^^^^^^^^^^^^^^^^
|
# problems gcc2.5.8 ^^^^^^^^^^^^^^^^^^^^^
|
||||||
CFLAGS="-pipe"
|
CFLAGS="-pipe -Wall"
|
||||||
HOSTCFLAGS="-DLINUX"
|
HOSTCFLAGS="-DLINUX"
|
||||||
NDBMLIB="-ldbm"
|
NDBMLIB="-ldbm"
|
||||||
|
CRYPTLIB=""
|
||||||
NSLLIB=""
|
NSLLIB=""
|
||||||
MAKE=make
|
MAKE=make
|
||||||
TMP=/tmp
|
TMP=/tmp
|
||||||
@ -33,13 +40,16 @@ case $UNX in
|
|||||||
;;
|
;;
|
||||||
########### USL UNIX ##############
|
########### USL UNIX ##############
|
||||||
unix_sv)
|
unix_sv)
|
||||||
|
V_VPATH="."
|
||||||
|
OBJDIR="."
|
||||||
CC=cc
|
CC=cc
|
||||||
CCP="gcc -E"
|
CPP="cc -E"
|
||||||
CFLAGS="-pipe"
|
CFLAGS=
|
||||||
HOSTCFLAGS=""
|
HOSTCFLAGS=""
|
||||||
NDBMLIB="/usr/ucblib/libucb.a"
|
NDBMLIB="/usr/ucblib/libucb.a"
|
||||||
|
CRYPTLIB="-lgen"
|
||||||
NSLLIB="-lnsl"
|
NSLLIB="-lnsl"
|
||||||
MAKE=gmake
|
MAKE=make
|
||||||
TMP=/tmp
|
TMP=/tmp
|
||||||
INSTALL=/usr/ucb/install
|
INSTALL=/usr/ucb/install
|
||||||
;;
|
;;
|
||||||
@ -48,12 +58,15 @@ case $UNX in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
export CC
|
export CC
|
||||||
export CCP
|
export CPP
|
||||||
export CFLAGS
|
export CFLAGS
|
||||||
export HOSTCFLAGS
|
export HOSTCFLAGS
|
||||||
export NDBMLIB
|
export NDBMLIB
|
||||||
|
export CRYPTLIB
|
||||||
export NSLLIB
|
export NSLLIB
|
||||||
export TMP
|
export TMP
|
||||||
export INSTALL
|
export INSTALL
|
||||||
|
export V_VPATH
|
||||||
|
export OBJDIR
|
||||||
|
|
||||||
mk $@
|
mk $@
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# (C)opyright 1993, 1995, Martin Stover, Softwareentwicklung, Marburg
|
# (C)opyright 1993, 1995, Martin Stover, Softwareentwicklung, Marburg
|
||||||
# last change: 08-Feb-96
|
# last change: 13-Feb-96
|
||||||
# MAR.S NW-Server Emulator
|
# MAR.S NW-Server Emulator
|
||||||
# Einfache Konfiguration, alles ab # ist Kommentar.
|
# Einfache Konfiguration, alles ab # ist Kommentar.
|
||||||
# Jeder Eintrag beginnt mit einer Zahl und dann folgt der Inhalt.
|
# Jeder Eintrag beginnt mit einer Zahl und dann folgt der Inhalt.
|
||||||
@ -53,15 +53,22 @@
|
|||||||
# since V 0.96pl8. To test them, this entry must be set to '1'.
|
# since V 0.96pl8. To test them, this entry must be set to '1'.
|
||||||
# and config.h must be altered to allow namespace calls.
|
# and config.h must be altered to allow namespace calls.
|
||||||
6 0 # tells server version: 2.15=0, 3.11=1
|
6 0 # tells server version: 2.15=0, 3.11=1
|
||||||
|
# Password handling
|
||||||
|
7 0 # 0 = use only encrypted passwords stuff (default)
|
||||||
|
# 1 = allow the unencrypted change password routine.
|
||||||
|
# 8 = allow all unencrypted stuff.
|
||||||
|
# 9 = use all unencryted calls + get crypt key will allways fail
|
||||||
|
# so the login program will use the old unencryted calls.
|
||||||
######################################
|
######################################
|
||||||
# GID and UID for _minimal_ rights
|
# GID and UID for _minimal_ rights
|
||||||
# will be used for not logins
|
# will be used for not logins
|
||||||
10 200 # GID
|
10 200 # GID
|
||||||
11 201 # UID
|
11 201 # UID
|
||||||
#############################
|
#############################
|
||||||
# the following passwords can be removed after the first
|
# the following passwords should be removed after the first
|
||||||
# start, because these entries will be inserted (crypted) into
|
# start, because these entries will be inserted (crypted) into
|
||||||
# the bindery
|
# the bindery. If you specify a password here, then this password
|
||||||
|
# will be put into bindery after every start of mars_nwe.
|
||||||
# one entry 12 for SUPERVISOR
|
# one entry 12 for SUPERVISOR
|
||||||
## NW-Name UNIX-Name [PASSWORD]
|
## NW-Name UNIX-Name [PASSWORD]
|
||||||
12 SUPERVISOR root MYPW # Supervisor
|
12 SUPERVISOR root MYPW # Supervisor
|
||||||
|
65
makefile.unx
65
makefile.unx
@ -1,14 +1,15 @@
|
|||||||
#if 0
|
#if 0
|
||||||
#makefile.unx 07-Feb-96
|
#makefile.unx 10-Feb-96
|
||||||
#endif
|
#endif
|
||||||
VPATH=..
|
|
||||||
|
VPATH=$(V_VPATH)
|
||||||
|
|
||||||
O=.o
|
O=.o
|
||||||
C=.c
|
C=.c
|
||||||
|
|
||||||
DEBUG=-DDB
|
|
||||||
V_H=0
|
V_H=0
|
||||||
V_L=96
|
V_L=96
|
||||||
P_L=8
|
P_L=9
|
||||||
#define D_P_L 1
|
#define D_P_L 1
|
||||||
DISTRIB=mars_nwe
|
DISTRIB=mars_nwe
|
||||||
#if D_P_L
|
#if D_P_L
|
||||||
@ -47,9 +48,9 @@ distrib: $(DESTMAKEFILE)
|
|||||||
distrib_bin: $(DESTMAKEFILE)
|
distrib_bin: $(DESTMAKEFILE)
|
||||||
$(MAKE) -f $(DESTMAKEFILE) n_$@
|
$(MAKE) -f $(DESTMAKEFILE) n_$@
|
||||||
|
|
||||||
$(DESTMAKEFILE): makefile.unx config.h
|
$(DESTMAKEFILE): $(VPATH)/makefile.unx $(VPATH)/config.h
|
||||||
rm -f $@
|
rm -f $@
|
||||||
cp ../makefile.unx makefile.c
|
cp $(VPATH)/makefile.unx makefile.c
|
||||||
$(CPP) $(HOSTCFLAGS) -I$(VPATH) makefile.c > $@
|
$(CPP) $(HOSTCFLAGS) -I$(VPATH) makefile.c > $@
|
||||||
rm -f makefile.c
|
rm -f makefile.c
|
||||||
#endif
|
#endif
|
||||||
@ -103,40 +104,42 @@ OBJS= net1$(O) tools$(O) connect$(O) nwdbm$(O) $(NWROUTE_O) \
|
|||||||
|
|
||||||
HOBJ3= $(PROG3)$(O) connect$(O) namspace$(O) nwvolume$(O) nwfile$(O)
|
HOBJ3= $(PROG3)$(O) connect$(O) namspace$(O) nwvolume$(O) nwfile$(O)
|
||||||
|
|
||||||
$(PROG1): $(PROG1)$(O) $(OBJ1)
|
#if 0
|
||||||
$(CC) -o ../$(PROG1) $(PROG1)$(O) $(OBJ1) $(NSLLIB)
|
#$(PROG1): $(PROG1)$(O) $(OBJ1)
|
||||||
|
# $(CC) -o $(VPATH)/$(PROG1) $(PROG1)$(O) $(OBJ1) $(NSLLIB)
|
||||||
|
#endif
|
||||||
|
|
||||||
$(PROG2): $(PROG2)$(O) $(OBJ2)
|
$(PROG2): $(PROG2)$(O) $(OBJ2)
|
||||||
$(CC) -o ../$(PROG2) $(PROG2)$(O) $(OBJ2) $(NSLLIB)
|
$(CC) -o $(VPATH)/$(PROG2) $(PROG2)$(O) $(OBJ2) $(NSLLIB)
|
||||||
#if 0
|
#if 0
|
||||||
#$(CC) -o ../$(PROG2) $(PROG2)$(O) $(OBJ2) $(NDBMLIB) $(NSLLIB)
|
#$(CC) -o $(VPATH)/$(PROG2) $(PROG2)$(O) $(OBJ2) $(NDBMLIB) $(NSLLIB)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
$(PROG3): $(PROG3)$(O) $(OBJ3)
|
$(PROG3): $(PROG3)$(O) $(OBJ3)
|
||||||
$(CC) -o ../$(PROG3) $(PROG3)$(O) $(OBJ3) $(NSLLIB)
|
$(CC) -o $(VPATH)/$(PROG3) $(PROG3)$(O) $(OBJ3) $(NSLLIB)
|
||||||
|
|
||||||
$(PROG4): $(PROG4)$(O) $(OBJ4)
|
$(PROG4): $(PROG4)$(O) $(OBJ4)
|
||||||
$(CC) -o ../$(PROG4) $(PROG4)$(O) $(OBJ4) $(NDBMLIB) $(NSLLIB)
|
$(CC) -o $(VPATH)/$(PROG4) $(PROG4)$(O) $(OBJ4) $(NDBMLIB) $(CRYPTLIB) $(NSLLIB)
|
||||||
|
|
||||||
$(PROG5): $(PROG5)$(O) $(OBJ5)
|
$(PROG5): $(PROG5)$(O) $(OBJ5)
|
||||||
$(CC) -o ../$(PROG5) $(PROG5)$(O) $(OBJ5) $(NSLLIB)
|
$(CC) -o $(VPATH)/$(PROG5) $(PROG5)$(O) $(OBJ5) $(NSLLIB)
|
||||||
|
|
||||||
$(HOBJ3): namspace.h connect.h nwvolume.h nwfile.h
|
$(HOBJ3): namspace.h connect.h nwvolume.h nwfile.h
|
||||||
$(OBJS): net.h config.h
|
$(OBJS): net.h config.h
|
||||||
|
|
||||||
$(C)$(O):
|
$(C)$(O):
|
||||||
$(CC) -c $(CFLAGS) $(HOSTCFLAGS) $(DEBUG)\
|
$(CC) -c $(CFLAGS) $(HOSTCFLAGS) \
|
||||||
-D_VERS_H_=$(V_H) -D_VERS_L_=$(V_L) -D_VERS_P_=$(P_L) $<
|
-D_VERS_H_=$(V_H) -D_VERS_L_=$(V_L) -D_VERS_P_=$(P_L) $<
|
||||||
|
|
||||||
n_all: $(PROGS)
|
n_all: $(PROGS)
|
||||||
|
|
||||||
n_install_ini:
|
n_install_ini:
|
||||||
cd .. && $(INSTALL) -m 664 nw.ini $(M_FILENAME_NW_INI) && cd obj
|
cd $(VPATH) && $(INSTALL) -m 664 nw.ini $(M_FILENAME_NW_INI) && cd $(OBJDIR)
|
||||||
|
|
||||||
n_install:
|
n_install:
|
||||||
cd .. && $(INSTALL) -d $(M_PATHNAME_PROGS) && cd obj
|
cd $(VPATH) && $(INSTALL) -d $(M_PATHNAME_PROGS) && cd $(OBJDIR)
|
||||||
cd .. && $(INSTALL) $(PROGS) $(M_PATHNAME_PROGS) && cd obj
|
cd $(VPATH) && $(INSTALL) $(PROGS) $(M_PATHNAME_PROGS) && cd $(OBJDIR)
|
||||||
@cd .. && (if [ -r $(M_FILENAME_NW_INI) ] ; then \
|
@cd $(VPATH) && (if [ -r $(M_FILENAME_NW_INI) ] ; then \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
echo "********************************************************"; \
|
echo "********************************************************"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
@ -154,20 +157,20 @@ echo "$(M_FILENAME_NW_INI) created from nw.ini"; \
|
|||||||
echo ""; \
|
echo ""; \
|
||||||
echo "********************************************************"; \
|
echo "********************************************************"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
fi; cd obj )
|
fi; cd $(OBJDIR) )
|
||||||
|
|
||||||
n_clean1:
|
n_clean1:
|
||||||
cd .. && (rm -f ~* examples/~* examples/.e.pck; cd obj)
|
cd $(VPATH) && (rm -f ~* examples/~* examples/.e.pck; cd $(OBJDIR))
|
||||||
|
|
||||||
n_clean: n_clean1
|
n_clean: n_clean1
|
||||||
rm -f *.o
|
rm -f *.o
|
||||||
cd .. && (rm -f $(PROGS); cd obj )
|
cd $(VPATH) && (rm -f $(PROGS); cd $(OBJDIR) )
|
||||||
|
|
||||||
n_distclean: n_clean
|
n_distclean: n_clean
|
||||||
cd .. && (rm -f *.dir *.pag; cd obj)
|
cd $(VPATH) && (rm -f *.dir *.pag; cd $(OBJDIR))
|
||||||
|
|
||||||
n_make_dir: n_clean1
|
n_make_dir: n_clean1
|
||||||
cd .. && (rm -rf obj/../$(DISTRIB) \
|
cd $(VPATH) && (rm -rf $(OBJDIR)/$(VPATH)/$(DISTRIB) \
|
||||||
; mkdir $(DISTRIB) \
|
; mkdir $(DISTRIB) \
|
||||||
; mkdir $(DISTRIB)/examples \
|
; mkdir $(DISTRIB)/examples \
|
||||||
; ln -f \
|
; ln -f \
|
||||||
@ -175,6 +178,7 @@ n_make_dir: n_clean1
|
|||||||
makefile.unx \
|
makefile.unx \
|
||||||
Makefile \
|
Makefile \
|
||||||
COPYING \
|
COPYING \
|
||||||
|
NEWS \
|
||||||
CHANGES \
|
CHANGES \
|
||||||
README \
|
README \
|
||||||
README.ger \
|
README.ger \
|
||||||
@ -186,17 +190,17 @@ n_make_dir: n_clean1
|
|||||||
; ln -f \
|
; ln -f \
|
||||||
examples/$(STERN) \
|
examples/$(STERN) \
|
||||||
$(DISTRIB)/examples/. \
|
$(DISTRIB)/examples/. \
|
||||||
; cd obj )
|
; cd $(OBJDIR) )
|
||||||
|
|
||||||
n_diff: n_make_dir
|
n_diff: n_make_dir
|
||||||
cd .. && ( \
|
cd $(VPATH) && ( \
|
||||||
makepatch $(DISTRIB).org $(DISTRIB) > $(PATCHF) \
|
makepatch $(DISTRIB).org $(DISTRIB) > $(PATCHF) \
|
||||||
; gzip -9 -f $(PATCHF) \
|
; gzip -9 -f $(PATCHF) \
|
||||||
; cd obj )
|
; cd $(OBJDIR) )
|
||||||
|
|
||||||
n_distrib: n_diff
|
n_distrib: n_diff
|
||||||
-mkdir /tmp/x
|
-mkdir /tmp/x
|
||||||
cd .. && (tar cvzf $(DISTRIBF).tgz $(DISTRIB) \
|
cd $(VPATH) && (tar cvzf $(DISTRIBF).tgz $(DISTRIB) \
|
||||||
; uue $(DISTRIBF).tgz; mv -f $(DISTRIB)-$(V_H).uue $(DISTRIBF).uue \
|
; uue $(DISTRIBF).tgz; mv -f $(DISTRIB)-$(V_H).uue $(DISTRIBF).uue \
|
||||||
; cp -a $(DISTRIB)/$(DISTRIB).lsm /tmp/yy \
|
; cp -a $(DISTRIB)/$(DISTRIB).lsm /tmp/yy \
|
||||||
; echo "" >> /tmp/yy \
|
; echo "" >> /tmp/yy \
|
||||||
@ -206,19 +210,20 @@ n_distrib: n_diff
|
|||||||
; rm $(DISTRIBF).uue \
|
; rm $(DISTRIBF).uue \
|
||||||
; mv $(DISTRIBF).tgz /tmp/x/. \
|
; mv $(DISTRIBF).tgz /tmp/x/. \
|
||||||
; cp -a $(DISTRIB)/$(DISTRIB).lsm /tmp/x/. \
|
; cp -a $(DISTRIB)/$(DISTRIB).lsm /tmp/x/. \
|
||||||
; cd obj )
|
; cd $(OBJDIR) )
|
||||||
|
|
||||||
n_distrib_bin:
|
n_distrib_bin:
|
||||||
cd .. && (tar cvzf /tmp/$(DISTRIB).bin.tgz \
|
cd $(VPATH) && (tar cvzf /tmp/$(DISTRIB).bin.tgz \
|
||||||
$(PROGS) \
|
$(PROGS) \
|
||||||
COPYING \
|
COPYING \
|
||||||
INSTALL \
|
INSTALL \
|
||||||
INSTALL.ger \
|
INSTALL.ger \
|
||||||
|
NEWS \
|
||||||
CHANGES \
|
CHANGES \
|
||||||
README \
|
README \
|
||||||
README.ger \
|
README.ger \
|
||||||
$(DISTRIB).lsm \
|
$(DISTRIB).lsm \
|
||||||
examples \
|
examples \
|
||||||
; cd obj)
|
; cd $(OBJDIR))
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Begin3
|
Begin3
|
||||||
Title: mars_nwe
|
Title: mars_nwe
|
||||||
Version: 0.96pl8
|
Version: 0.96pl9
|
||||||
Entered-date: 08-Feb-96
|
Entered-date: 13-Feb-96
|
||||||
Description: full novell-server-emulator (src),beta
|
Description: full novell-server-emulator (src),beta
|
||||||
supports file-services, bindery-services,
|
supports file-services, bindery-services,
|
||||||
printing-services, routing-services
|
printing-services, routing-services
|
||||||
@ -9,7 +9,7 @@ Keywords: novell, netware, server, ipx, ncp, tli
|
|||||||
Author: mstover@freeway.de (Martin Stover)
|
Author: mstover@freeway.de (Martin Stover)
|
||||||
Maintained-by: mstover@freeway.de (Martin Stover)
|
Maintained-by: mstover@freeway.de (Martin Stover)
|
||||||
Primary-site: linux01.gwdg.de /pub/ncpfs
|
Primary-site: linux01.gwdg.de /pub/ncpfs
|
||||||
120kB mars_nwe-0.96.pl7.tgz
|
110kB mars_nwe-0.96.pl9.tgz
|
||||||
Alternate-site: ftp.uni-duisburg.de /pub/linux/ipxware
|
Alternate-site: ftp.uni-duisburg.de /pub/linux/ipxware
|
||||||
Platforms: Linux (1.2.xx, 1.3.32, > 1.3.55 tested, others should work)
|
Platforms: Linux (1.2.xx, 1.3.32, > 1.3.55 tested, others should work)
|
||||||
Copying-policy: GNU
|
Copying-policy: GNU
|
||||||
|
@ -219,7 +219,7 @@ int touch_handle_entry(int dbase)
|
|||||||
char *debug_nwpath_name(N_NW_PATH *p)
|
char *debug_nwpath_name(N_NW_PATH *p)
|
||||||
/* for debugging */
|
/* for debugging */
|
||||||
{
|
{
|
||||||
#ifdef DB
|
#if DO_DEBUG
|
||||||
static char nwpathname[512];
|
static char nwpathname[512];
|
||||||
char volname[300];
|
char volname[300];
|
||||||
if (nw_get_volume_name(p->volume, volname) < 0)
|
if (nw_get_volume_name(p->volume, volname) < 0)
|
||||||
|
88
ncpserv.c
88
ncpserv.c
@ -1,5 +1,5 @@
|
|||||||
/* ncpserv.c */
|
/* ncpserv.c */
|
||||||
#define REVISION_DATE "08-Feb-96"
|
#define REVISION_DATE "13-Feb-96"
|
||||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -112,7 +112,7 @@ typedef struct {
|
|||||||
ipxAddr_t client_adr; /* address client */
|
ipxAddr_t client_adr; /* address client */
|
||||||
uint32 object_id; /* logged object */
|
uint32 object_id; /* logged object */
|
||||||
/* 0 = not logged in */
|
/* 0 = not logged in */
|
||||||
uint8 crypt_key[8]; /* password generierung */
|
uint8 crypt_key[8]; /* password generation */
|
||||||
uint8 message[60]; /* saved BCastmessage */
|
uint8 message[60]; /* saved BCastmessage */
|
||||||
int sequence; /* previous sequence */
|
int sequence; /* previous sequence */
|
||||||
int retry; /* one reply being serviced is sent */
|
int retry; /* one reply being serviced is sent */
|
||||||
@ -159,7 +159,7 @@ static int new_conn_nr(void)
|
|||||||
return(0); /* nothing free */
|
return(0); /* nothing free */
|
||||||
}
|
}
|
||||||
|
|
||||||
int free_conn_nr(int nr)
|
static int free_conn_nr(int nr)
|
||||||
{
|
{
|
||||||
if (nr && --nr < anz_connect) {
|
if (nr && --nr < anz_connect) {
|
||||||
connections[nr].fd = -1;
|
connections[nr].fd = -1;
|
||||||
@ -168,7 +168,7 @@ int free_conn_nr(int nr)
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int find_conn_nr(ipxAddr_t *addr)
|
static int find_conn_nr(ipxAddr_t *addr)
|
||||||
{
|
{
|
||||||
int j = -1;
|
int j = -1;
|
||||||
while (++j < anz_connect) {
|
while (++j < anz_connect) {
|
||||||
@ -179,7 +179,7 @@ int find_conn_nr(ipxAddr_t *addr)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_connection(int conn)
|
static void clear_connection(int conn)
|
||||||
{
|
{
|
||||||
nwserv_close_wdog(conn);
|
nwserv_close_wdog(conn);
|
||||||
if (conn > 0 && --conn < anz_connect) {
|
if (conn > 0 && --conn < anz_connect) {
|
||||||
@ -188,7 +188,7 @@ void clear_connection(int conn)
|
|||||||
close(c->fd);
|
close(c->fd);
|
||||||
c->fd = -1;
|
c->fd = -1;
|
||||||
if (c->pid > -1) {
|
if (c->pid > -1) {
|
||||||
kill(c->pid, SIGTERM); /* hier nochmal's killen */
|
kill(c->pid, SIGTERM); /* kill it */
|
||||||
c->pid = -1;
|
c->pid = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -202,9 +202,15 @@ void clear_connection(int conn)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int find_get_conn_nr(ipxAddr_t *addr)
|
static int find_get_conn_nr(ipxAddr_t *addr)
|
||||||
{
|
{
|
||||||
int connection=find_conn_nr(addr);
|
int connection=find_conn_nr(addr);
|
||||||
|
#if 0
|
||||||
|
if (connection) {
|
||||||
|
clear_connection(connection);
|
||||||
|
connection=0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (!connection){
|
if (!connection){
|
||||||
if ((connection = new_conn_nr()) > 0){
|
if ((connection = new_conn_nr()) > 0){
|
||||||
CONNECTION *c=&(connections[connection-1]);
|
CONNECTION *c=&(connections[connection-1]);
|
||||||
@ -464,16 +470,24 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
NETOBJ obj;
|
NETOBJ obj;
|
||||||
char password[80];
|
char password[80];
|
||||||
obj.type = GET_BE16(p);
|
obj.type = GET_BE16(p);
|
||||||
strmaxcpy((char*)obj.name, (char*)(p+3), (int) *(p+2));
|
xstrmaxcpy(obj.name, p+3, (int) *(p+2));
|
||||||
upstr(obj.name);
|
upstr(obj.name);
|
||||||
strmaxcpy(password, (char*)(p1+1),
|
xstrmaxcpy(password, p1+1, (int) *p1);
|
||||||
max(sizeof(password)-1, (int) *p1));
|
XDPRINTF((10, 0, "LOGIN unencrypted PW NAME='%s', PASSW='%s'",
|
||||||
XDPRINTF((1, 0, "TODO:LOGIN unencrypted PW NAME='%s', PASSW='%s'",
|
|
||||||
obj.name, password));
|
obj.name, password));
|
||||||
if (0 == (result = find_obj_id(&obj, 0))) {
|
if (0 == (result = find_obj_id(&obj, 0))) {
|
||||||
/* TODO: check password !!!!!!! */
|
if (password_scheme & PW_SCHEME_LOGIN) {
|
||||||
;;
|
#if 0
|
||||||
result = 0xff;
|
if (obj.id == 1) {
|
||||||
|
result=-0xff; /* SUPERVISOR ever encryted !! */
|
||||||
|
XDPRINTF((1, 0, "Supervisor tried unencrypted LOGIN"));
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
result=nw_test_unenpasswd(obj.id, password);
|
||||||
|
} else {
|
||||||
|
XDPRINTF((1, 0, "unencryted logins are not enabled"));
|
||||||
|
result=-0xff;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
c->object_id = obj.id; /* actuell Object ID */
|
c->object_id = obj.id; /* actuell Object ID */
|
||||||
@ -547,13 +561,15 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
uint8 *pp = responsedata;
|
uint8 *pp = responsedata;
|
||||||
data_len = k;
|
data_len = k;
|
||||||
while (k--) *pp++ = *p++ =
|
while (k--) *pp++ = *p++ =
|
||||||
#if 0
|
#ifndef _MAR_TESTS_
|
||||||
(uint8) rand();
|
(uint8) rand();
|
||||||
#else
|
#else
|
||||||
(uint8) k;
|
(uint8) k;
|
||||||
#endif
|
#endif
|
||||||
/* if all here are same (1 or 2) then the resulting key is */
|
/* if all here are same (1 or 2) then the resulting key is */
|
||||||
/* 00000000 */
|
/* 00000000 */
|
||||||
|
if (password_scheme & PW_SCHEME_GET_KEY_FAIL)
|
||||||
|
completition=0xfb;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -562,7 +578,8 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
NETOBJ obj;
|
NETOBJ obj;
|
||||||
int result;
|
int result;
|
||||||
obj.type = GET_BE16(p);
|
obj.type = GET_BE16(p);
|
||||||
strmaxcpy((char*)obj.name, (char*)(p+3), *(p+2));
|
obj.id = 0;
|
||||||
|
xstrmaxcpy(obj.name, (char*)(p+3), *(p+2));
|
||||||
upstr(obj.name);
|
upstr(obj.name);
|
||||||
XDPRINTF((2, 0, "LOGIN CRYPTED PW NAME='%s'",obj.name));
|
XDPRINTF((2, 0, "LOGIN CRYPTED PW NAME='%s'",obj.name));
|
||||||
if (0 == (result = find_obj_id(&obj, 0)))
|
if (0 == (result = find_obj_id(&obj, 0)))
|
||||||
@ -573,7 +590,13 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
get_guid((int*)(rdata+2), (int*)(rdata+2+sizeof(int)), obj.id);
|
get_guid((int*)(rdata+2), (int*)(rdata+2+sizeof(int)), obj.id);
|
||||||
in_len=12 + 2*sizeof(int);
|
in_len=12 + 2*sizeof(int);
|
||||||
return(-1); /* nwconn must do the rest */
|
return(-1); /* nwconn must do the rest */
|
||||||
} else completition = (uint8) -result;
|
} else {
|
||||||
|
if ((password_scheme & PW_SCHEME_LOGIN) &&
|
||||||
|
result == -0xff && obj.id != 1) /* not supervisor */
|
||||||
|
completition = 0xfb; /* We lie here, to force LOGIN */
|
||||||
|
else /* to use the old call */
|
||||||
|
completition = (uint8) -result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -720,7 +743,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
uint8 *p = rdata;
|
uint8 *p = rdata;
|
||||||
NETOBJ obj;
|
NETOBJ obj;
|
||||||
obj.type = GET_BE16(p+1);
|
obj.type = GET_BE16(p+1);
|
||||||
strmaxcpy((char*)obj.name, (char*)(p+4), (int) *(p+3));
|
xstrmaxcpy(obj.name, (char*)(p+4), (int) *(p+3));
|
||||||
result = nw_change_obj_security(&obj, (int)*p);
|
result = nw_change_obj_security(&obj, (int)*p);
|
||||||
}
|
}
|
||||||
if (result < 0) completition = (uint8) -result;
|
if (result < 0) completition = (uint8) -result;
|
||||||
@ -756,8 +779,6 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
if (result < 0) completition = (uint8) -result;
|
if (result < 0) completition = (uint8) -result;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case 0x3b : { /* Change Prop Security */
|
case 0x3b : { /* Change Prop Security */
|
||||||
uint8 *p = rdata;
|
uint8 *p = rdata;
|
||||||
int object_type = GET_BE16(p);
|
int object_type = GET_BE16(p);
|
||||||
@ -848,19 +869,32 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case 0x40: { /* change object password */
|
case 0x40: { /* change object password */
|
||||||
|
if (password_scheme & PW_SCHEME_CHANGE_PW) {
|
||||||
uint8 *p = rdata;
|
uint8 *p = rdata;
|
||||||
|
uint8 oldpassword[50];
|
||||||
|
uint8 newpassword[50];
|
||||||
NETOBJ obj;
|
NETOBJ obj;
|
||||||
int result;
|
int result;
|
||||||
obj.type = GET_BE16(p);
|
obj.type = GET_BE16(p);
|
||||||
strmaxcpy((char*)obj.name, (char*)(p+3), *(p+2));
|
p+=2;
|
||||||
|
xstrmaxcpy(obj.name, p+1, (int) *p);
|
||||||
upstr(obj.name);
|
upstr(obj.name);
|
||||||
|
p += ((*p)+1);
|
||||||
|
xstrmaxcpy(oldpassword, p+1, (int) *p);
|
||||||
|
p += ((*p)+1);
|
||||||
|
xstrmaxcpy(newpassword, p+1, (int) *p);
|
||||||
if (0 == (result = find_obj_id(&obj, 0))) {
|
if (0 == (result = find_obj_id(&obj, 0))) {
|
||||||
;;
|
XDPRINTF((6, 0, "CHPW: OLD=`%s`, NEW=`%s`", oldpassword,
|
||||||
|
newpassword));
|
||||||
|
if (c->object_id == 1 ||
|
||||||
|
0 == (result=nw_test_unenpasswd(obj.id, oldpassword)))
|
||||||
|
result=nw_set_passwd(obj.id, newpassword);
|
||||||
}
|
}
|
||||||
if (result < 0) completition = (uint8) -result;
|
if (result < 0) completition = (uint8) -result;
|
||||||
XDPRINTF((1, 0, "TODO: Change Obj PW from OBJECT='%s', result=%d",
|
} else {
|
||||||
obj.name, result));
|
XDPRINTF((1, 0, "Change object password unencryted not enabled"));
|
||||||
completition=0xff;
|
completition=0xff;
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case 0x41 : { /* add Bindery Object to Set */
|
case 0x41 : { /* add Bindery Object to Set */
|
||||||
@ -1039,7 +1073,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
|||||||
/* !!!!!! TO DO */
|
/* !!!!!! TO DO */
|
||||||
NETOBJ obj;
|
NETOBJ obj;
|
||||||
obj.id = GET_BE32(rdata);
|
obj.id = GET_BE32(rdata);
|
||||||
XDPRINTF((1, 0, "TODO:READ QUEUE STATUS von Q=0x%lx", obj.id));
|
XDPRINTF((1, 0, "TODO:READ QUEUE STATUS of Q=0x%lx", obj.id));
|
||||||
completition=0xd5; /* no Queue Job */
|
completition=0xd5; /* no Queue Job */
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
@ -1450,7 +1484,7 @@ int main(int argc, char *argv[])
|
|||||||
int anz=write(c->fd, (char*)ncprequest, in_len);
|
int anz=write(c->fd, (char*)ncprequest, in_len);
|
||||||
XDPRINTF((10,0, "write to %d, anz = %d", c->fd, anz));
|
XDPRINTF((10,0, "write to %d, anz = %d", c->fd, anz));
|
||||||
if (func == 0x19) { /* logout */
|
if (func == 0x19) { /* logout */
|
||||||
c->object_id = 0; /* not LOGGED */
|
c->object_id = 0; /* not LOGIN */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c->sequence = ncprequest->sequence; /* save last sequence */
|
c->sequence = ncprequest->sequence; /* save last sequence */
|
||||||
@ -1492,7 +1526,7 @@ int main(int argc, char *argv[])
|
|||||||
CONNECTION *c = &(connections[connection-1]);
|
CONNECTION *c = &(connections[connection-1]);
|
||||||
int anz;
|
int anz;
|
||||||
c->message[0] = '\0';
|
c->message[0] = '\0';
|
||||||
c->object_id = 0; /* firsttime set 0 for NOT LOGGED */
|
c->object_id = 0; /* firsttime set 0 for NOT LOGIN */
|
||||||
c->sequence = 0;
|
c->sequence = 0;
|
||||||
anz=write(c->fd, (char*)ncprequest, in_len);
|
anz=write(c->fd, (char*)ncprequest, in_len);
|
||||||
XDPRINTF((10, 0, "write to oldconn %d, anz = %d", c->fd, anz));
|
XDPRINTF((10, 0, "write to oldconn %d, anz = %d", c->fd, anz));
|
||||||
|
6
net.h
6
net.h
@ -1,4 +1,4 @@
|
|||||||
/* net.h 08-Feb-96 */
|
/* net.h 11-Feb-96 */
|
||||||
|
|
||||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
@ -95,6 +95,10 @@
|
|||||||
/* ===================> config.h <======================= */
|
/* ===================> config.h <======================= */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef DO_DEBUG
|
||||||
|
# define DO_DEBUG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef MAX_CONNECTIONS
|
#ifndef MAX_CONNECTIONS
|
||||||
# define MAX_CONNECTIONS 5 /* maximum Number of Connections */
|
# define MAX_CONNECTIONS 5 /* maximum Number of Connections */
|
||||||
#endif
|
#endif
|
||||||
|
17
nwclient.c
17
nwclient.c
@ -1,4 +1,4 @@
|
|||||||
/* nwclient.c: 24-Dec-95 */
|
/* nwclient.c: 10-Feb-96 */
|
||||||
/*
|
/*
|
||||||
* Einfacher Testclient, wird von nwserv (im Client Modus) gestartet
|
* Einfacher Testclient, wird von nwserv (im Client Modus) gestartet
|
||||||
* Dieses Modul hilft dabei, NCP Responses eines
|
* Dieses Modul hilft dabei, NCP Responses eines
|
||||||
@ -31,7 +31,7 @@ static ipxAddr_t my_addr;
|
|||||||
static int fd_ipx;
|
static int fd_ipx;
|
||||||
static int fd_wdog;
|
static int fd_wdog;
|
||||||
|
|
||||||
static int open_socket()
|
static int open_socket(int *sock_nr)
|
||||||
{
|
{
|
||||||
int ipx_fd=t_open("/dev/ipx", O_RDWR, NULL);
|
int ipx_fd=t_open("/dev/ipx", O_RDWR, NULL);
|
||||||
struct t_bind bind;
|
struct t_bind bind;
|
||||||
@ -39,7 +39,11 @@ static int open_socket()
|
|||||||
t_error("t_open !Ok");
|
t_error("t_open !Ok");
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
if (sock_nr) {
|
||||||
|
U16_TO_BE16(*sock_nr, my_addr.sock);
|
||||||
|
} else {
|
||||||
U16_TO_BE16(0, my_addr.sock);
|
U16_TO_BE16(0, my_addr.sock);
|
||||||
|
}
|
||||||
bind.addr.len = sizeof(ipxAddr_t);
|
bind.addr.len = sizeof(ipxAddr_t);
|
||||||
bind.addr.maxlen = sizeof(ipxAddr_t);
|
bind.addr.maxlen = sizeof(ipxAddr_t);
|
||||||
bind.addr.buf = (char*)&my_addr;
|
bind.addr.buf = (char*)&my_addr;
|
||||||
@ -49,14 +53,17 @@ static int open_socket()
|
|||||||
t_close(ipx_fd);
|
t_close(ipx_fd);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
if (sock_nr) *sock_nr=GET_BE16(my_addr.sock);
|
||||||
XDPRINTF((1,0, "socket bound TO %s", visable_ipx_adr(&my_addr) ));
|
XDPRINTF((1,0, "socket bound TO %s", visable_ipx_adr(&my_addr) ));
|
||||||
return(ipx_fd);
|
return(ipx_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_client()
|
static int init_client()
|
||||||
{
|
{
|
||||||
return( (fd_ipx = open_socket()) > -1
|
int sock_nr=0;
|
||||||
&& (fd_wdog = open_socket()) > -1 ? 0 : 1);
|
return( (fd_ipx = open_socket(&sock_nr)) > -1
|
||||||
|
&& sock_nr++
|
||||||
|
&& (fd_wdog = open_socket(&sock_nr)) > -1 ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DATA OUT */
|
/* DATA OUT */
|
||||||
@ -196,6 +203,7 @@ static int get_conn_nr(void)
|
|||||||
{
|
{
|
||||||
ncp_request(0x1111, sequence, 0xff, 0, 0xff, 0,
|
ncp_request(0x1111, sequence, 0xff, 0, 0xff, 0,
|
||||||
0, "Get Connection Nr.");
|
0, "Get Connection Nr.");
|
||||||
|
|
||||||
if (!handle_event()) {
|
if (!handle_event()) {
|
||||||
connection = ncpresponse->connection;
|
connection = ncpresponse->connection;
|
||||||
XDPRINTF((1, 0, "NWCLIENT GOT CONNECTION NR:%d", connection));
|
XDPRINTF((1, 0, "NWCLIENT GOT CONNECTION NR:%d", connection));
|
||||||
@ -716,6 +724,7 @@ int main(int argc, char **argv)
|
|||||||
get_server_time();
|
get_server_time();
|
||||||
do_5f();
|
do_5f();
|
||||||
|
|
||||||
|
|
||||||
file_search_init(NULL, 1, NULL);
|
file_search_init(NULL, 1, NULL);
|
||||||
get_bindery_access();
|
get_bindery_access();
|
||||||
get_bindery_object_id(1, "SUPERVISOR");
|
get_bindery_object_id(1, "SUPERVISOR");
|
||||||
|
20
nwconn.c
20
nwconn.c
@ -1,4 +1,4 @@
|
|||||||
/* nwconn.c 07-Feb-96 */
|
/* nwconn.c 10-Feb-96 */
|
||||||
/* one process / connection */
|
/* one process / connection */
|
||||||
|
|
||||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||||
@ -204,7 +204,7 @@ static void handle_ncp_serv()
|
|||||||
|
|
||||||
|
|
||||||
case 0x16 : {
|
case 0x16 : {
|
||||||
uint8 len = *(requestdata+1);
|
/* uint8 len = *(requestdata+1); */
|
||||||
uint8 *p = requestdata +2;
|
uint8 *p = requestdata +2;
|
||||||
if (0 == *p){
|
if (0 == *p){
|
||||||
/****** * SetDirektoryHandle *************/
|
/****** * SetDirektoryHandle *************/
|
||||||
@ -472,7 +472,7 @@ static void handle_ncp_serv()
|
|||||||
} else if (*p == 0x20){
|
} else if (*p == 0x20){
|
||||||
/* scan volume user disk restrictions */
|
/* scan volume user disk restrictions */
|
||||||
uint8 volnr = *(p+1);
|
uint8 volnr = *(p+1);
|
||||||
uint32 sequenz = GET_BE32(p+2);
|
/* uint32 sequenz = GET_BE32(p+2); */
|
||||||
struct XDATA {
|
struct XDATA {
|
||||||
uint8 entries; /* 0x0 */
|
uint8 entries; /* 0x0 */
|
||||||
/*--- per entry (max.entries = 12) ----*/
|
/*--- per entry (max.entries = 12) ----*/
|
||||||
@ -636,7 +636,7 @@ static void handle_ncp_serv()
|
|||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
case 0x17 : { /* FILE SERVER ENVIRONMENT */
|
case 0x17 : { /* FILE SERVER ENVIRONMENT */
|
||||||
uint8 len = *(requestdata+1);
|
/* uint8 len = *(requestdata+1); */
|
||||||
uint8 ufunc = *(requestdata+2);
|
uint8 ufunc = *(requestdata+2);
|
||||||
switch (ufunc) {
|
switch (ufunc) {
|
||||||
case 0x14:
|
case 0x14:
|
||||||
@ -698,9 +698,9 @@ static void handle_ncp_serv()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x68: /* creat queue job and file old */
|
case 0x68: /* create queue job and file old */
|
||||||
case 0x79: { /* creat queue job and file */
|
case 0x79: { /* create queue job and file */
|
||||||
/* somme of this call is handled in ncpserv !! */
|
/* some of this call is handled in ncpserv !! */
|
||||||
struct INPUT {
|
struct INPUT {
|
||||||
uint8 header[7]; /* Requestheader */
|
uint8 header[7]; /* Requestheader */
|
||||||
uint8 packetlen[2]; /* low high */
|
uint8 packetlen[2]; /* low high */
|
||||||
@ -746,7 +746,7 @@ static void handle_ncp_serv()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xf3: { /* Map Direktory Number TO PATH */
|
case 0xf3: { /* Map Direktory Number TO PATH */
|
||||||
XDPRINTF((2,0, "TODO: Map Direktory Number TO PATH"));
|
XDPRINTF((2,0, "TODO: Map Directory Number TO PATH"));
|
||||||
completition = 0xff;
|
completition = 0xff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1027,12 +1027,12 @@ static void handle_ncp_serv()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x46 : /* chmod Datei ??? */
|
case 0x46 : /* chmod file ??? */
|
||||||
{
|
{
|
||||||
struct INPUT {
|
struct INPUT {
|
||||||
uint8 header[7]; /* Requestheader */
|
uint8 header[7]; /* Requestheader */
|
||||||
uint8 attrib; /* 0x80, od 0x0 */
|
uint8 attrib; /* 0x80, od 0x0 */
|
||||||
/* 0x80 z.B. f<>r Sharable */
|
/* 0x80 for example for sharable */
|
||||||
uint8 dir_handle; /* ??? z.B.0x1 */
|
uint8 dir_handle; /* ??? z.B.0x1 */
|
||||||
uint8 modus; /* z.B.0x6 */
|
uint8 modus; /* z.B.0x6 */
|
||||||
uint8 len;
|
uint8 len;
|
||||||
|
89
nwdbm.c
89
nwdbm.c
@ -1,4 +1,4 @@
|
|||||||
/* nwdbm.c 13-Jan-96 data base for mars_nwe */
|
/* nwdbm.c 12-Feb-96 data base for mars_nwe */
|
||||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -26,12 +26,18 @@
|
|||||||
#include "nwcrypt.h"
|
#include "nwcrypt.h"
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
# include <ndbm.h>
|
# include <ndbm.h>
|
||||||
|
# define SHADOW_PWD 0
|
||||||
#else
|
#else
|
||||||
# include </usr/ucbinclude/ndbm.h>
|
# include </usr/ucbinclude/ndbm.h>
|
||||||
|
# define SHADOW_PWD 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if SHADOW_PWD
|
||||||
|
# include <shadow.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
int tells_server_version=0;
|
int tells_server_version=0;
|
||||||
|
int password_scheme=0;
|
||||||
|
|
||||||
static char *fnprop = "nwprop";
|
static char *fnprop = "nwprop";
|
||||||
static char *fnval = "nwval";
|
static char *fnval = "nwval";
|
||||||
@ -903,20 +909,33 @@ uint32 nw_new_create_prop(uint32 wanted_id,
|
|||||||
return(obj.id);
|
return(obj.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct passwd *nw_getpwnam(uint32 obj_id)
|
typedef struct {
|
||||||
|
int pw_uid;
|
||||||
|
int pw_gid;
|
||||||
|
char pw_passwd[80];
|
||||||
|
} MYPASSWD;
|
||||||
|
|
||||||
|
static MYPASSWD *nw_getpwnam(uint32 obj_id)
|
||||||
{
|
{
|
||||||
static struct passwd pwstat;
|
static MYPASSWD pwstat;
|
||||||
char buff[200];
|
char buff[200];
|
||||||
if (nw_get_prop_val_str(obj_id, "UNIX_USER", buff) > 0){
|
if (nw_get_prop_val_str(obj_id, "UNIX_USER", buff) > 0){
|
||||||
struct passwd *pw = getpwnam(buff);
|
struct passwd *pw = getpwnam(buff);
|
||||||
if (NULL != pw) {
|
if (NULL != pw) {
|
||||||
memcpy(&pwstat, pw, sizeof(struct passwd));
|
memcpy(&pwstat, pw, sizeof(struct passwd));
|
||||||
|
pwstat.pw_uid = pw->pw_uid;
|
||||||
|
pwstat.pw_gid = pw->pw_gid;
|
||||||
|
xstrcpy(pwstat.pw_passwd, pw->pw_passwd);
|
||||||
|
#if SHADOW_PWD
|
||||||
|
if (pwstat.pw_passwd[0] == 'x' && pwstat.pw_passwd[1]=='\0') {
|
||||||
|
struct spwd *spw=getspnam(buff);
|
||||||
|
if (spw) xstrcpy(pwstat.pw_passwd, spw->sp_pwdp);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
XDPRINTF((2,0, "FOUND obj_id=0x%x, pwnam=%s, gid=%d, uid=%d",
|
XDPRINTF((2,0, "FOUND obj_id=0x%x, pwnam=%s, gid=%d, uid=%d",
|
||||||
obj_id, buff, pw->pw_gid, pw->pw_uid));
|
obj_id, buff, pw->pw_gid, pw->pw_uid));
|
||||||
endpwent ();
|
|
||||||
return(&pwstat);
|
return(&pwstat);
|
||||||
}
|
}
|
||||||
endpwent ();
|
|
||||||
}
|
}
|
||||||
XDPRINTF((2,0, "NOT FOUND PWNAM of obj_id=0x%x", obj_id));
|
XDPRINTF((2,0, "NOT FOUND PWNAM of obj_id=0x%x", obj_id));
|
||||||
return(NULL);
|
return(NULL);
|
||||||
@ -925,7 +944,7 @@ struct passwd *nw_getpwnam(uint32 obj_id)
|
|||||||
int get_guid(int *gid, int *uid, uint32 obj_id)
|
int get_guid(int *gid, int *uid, uint32 obj_id)
|
||||||
/* searched for gid und uid of actual obj */
|
/* searched for gid und uid of actual obj */
|
||||||
{
|
{
|
||||||
struct passwd *pw = nw_getpwnam(obj_id);
|
MYPASSWD *pw = nw_getpwnam(obj_id);
|
||||||
if (NULL != pw) {
|
if (NULL != pw) {
|
||||||
*gid = pw->pw_gid;
|
*gid = pw->pw_gid;
|
||||||
*uid = pw->pw_uid;
|
*uid = pw->pw_uid;
|
||||||
@ -937,6 +956,15 @@ int get_guid(int *gid, int *uid, uint32 obj_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int crypt_pw_ok(uint8 *password, char *passwd)
|
||||||
|
/* returns 0 if not ok */
|
||||||
|
{
|
||||||
|
char pnul[2] = {'\0', '\0'};
|
||||||
|
char *pp = (password) ? (char*)password : pnul;
|
||||||
|
char *p = crypt(pp, passwd);
|
||||||
|
return( (strcmp(p, passwd)) ? 0 : 1 );
|
||||||
|
}
|
||||||
|
|
||||||
int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key)
|
int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key)
|
||||||
/* returns 0, if password ok and -0xff if not ok */
|
/* returns 0, if password ok and -0xff if not ok */
|
||||||
{
|
{
|
||||||
@ -946,7 +974,42 @@ int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key)
|
|||||||
memcpy(keybuff, vgl_key, sizeof(keybuff));
|
memcpy(keybuff, vgl_key, sizeof(keybuff));
|
||||||
nw_encrypt(keybuff, buf, keybuff);
|
nw_encrypt(keybuff, buf, keybuff);
|
||||||
return (memcmp(akt_key, keybuff, sizeof(keybuff)) ? -0xff : 0);
|
return (memcmp(akt_key, keybuff, sizeof(keybuff)) ? -0xff : 0);
|
||||||
} else return(0); /* no password */
|
} else {
|
||||||
|
if (password_scheme & PW_SCHEME_LOGIN) {
|
||||||
|
MYPASSWD *pw = nw_getpwnam(obj_id);
|
||||||
|
if (pw && *(pw->pw_passwd) && !crypt_pw_ok(NULL, pw->pw_passwd))
|
||||||
|
return(-0xff);
|
||||||
|
if (obj_id == 1) return(-0xff);
|
||||||
|
}
|
||||||
|
return(0); /* no password */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int nw_test_unenpasswd(uint32 obj_id, uint8 *password)
|
||||||
|
{
|
||||||
|
uint8 passwordu[100];
|
||||||
|
uint8 passwd[200];
|
||||||
|
uint8 stored_passwd[200];
|
||||||
|
MYPASSWD *pw;
|
||||||
|
if (password && *password
|
||||||
|
&& nw_get_prop_val_str(obj_id, "PASSWORD", stored_passwd) > 0 ) {
|
||||||
|
uint8 s_uid[4];
|
||||||
|
U32_TO_BE32(obj_id, s_uid);
|
||||||
|
xstrcpy(passwordu, password);
|
||||||
|
upstr(passwordu);
|
||||||
|
shuffle(s_uid, passwordu, strlen(passwordu), passwd);
|
||||||
|
if (!memcmp(passwd, stored_passwd, 16)) return(0);
|
||||||
|
}
|
||||||
|
if (NULL != (pw = nw_getpwnam(obj_id))) {
|
||||||
|
int pwok = crypt_pw_ok(password, pw->pw_passwd);
|
||||||
|
if (!pwok) {
|
||||||
|
uint8 passwordu[100];
|
||||||
|
xstrcpy(passwordu, password);
|
||||||
|
downstr(passwordu);
|
||||||
|
pwok = crypt_pw_ok(passwordu, pw->pw_passwd);
|
||||||
|
}
|
||||||
|
return((pwok) ? 0 : -0xff);
|
||||||
|
} else return(-0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
int nw_set_enpasswd(uint32 obj_id, uint8 *passwd)
|
int nw_set_enpasswd(uint32 obj_id, uint8 *passwd)
|
||||||
@ -993,6 +1056,7 @@ int nw_set_passwd(uint32 obj_id, char *password)
|
|||||||
return(nw_set_enpasswd(obj_id, NULL));
|
return(nw_set_enpasswd(obj_id, NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int prop_add_new_member(uint32 obj_id, int prop_id, uint32 member_id)
|
int prop_add_new_member(uint32 obj_id, int prop_id, uint32 member_id)
|
||||||
/* addiert member to set, if member not in set */
|
/* addiert member to set, if member not in set */
|
||||||
{
|
{
|
||||||
@ -1123,6 +1187,17 @@ void nw_fill_standard(char *servername, ipxAddr_t *adr)
|
|||||||
while (0 != (what =get_ini_entry(f, 0, (char*)buff, sizeof(buff)))) {
|
while (0 != (what =get_ini_entry(f, 0, (char*)buff, sizeof(buff)))) {
|
||||||
if (6 == what) { /* Server Version */
|
if (6 == what) { /* Server Version */
|
||||||
tells_server_version = atoi(buff);
|
tells_server_version = atoi(buff);
|
||||||
|
} else if (7 == what) { /* password_scheme */
|
||||||
|
int pwscheme = atoi(buff);
|
||||||
|
password_scheme = 0;
|
||||||
|
switch (pwscheme) {
|
||||||
|
case 9 : password_scheme |= PW_SCHEME_GET_KEY_FAIL;
|
||||||
|
case 8 : password_scheme |= PW_SCHEME_LOGIN;
|
||||||
|
case 1 : password_scheme |= PW_SCHEME_CHANGE_PW;
|
||||||
|
break;
|
||||||
|
default : password_scheme = 0;
|
||||||
|
break;
|
||||||
|
} /* switch */
|
||||||
} else if (21 == what) { /* QUEUES */
|
} else if (21 == what) { /* QUEUES */
|
||||||
char name[100];
|
char name[100];
|
||||||
char directory[200];
|
char directory[200];
|
||||||
|
15
nwdbm.h
15
nwdbm.h
@ -1,4 +1,4 @@
|
|||||||
/* nwdbm.h 08-Jan-96 */
|
/* nwdbm.h 12-Feb-96 */
|
||||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -15,6 +15,8 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
#ifndef _NWDBM_H_
|
||||||
|
#define _NWDBM_H_
|
||||||
|
|
||||||
#define NETOBJ_KEY_SIZE 4
|
#define NETOBJ_KEY_SIZE 4
|
||||||
|
|
||||||
@ -59,6 +61,12 @@ typedef struct {
|
|||||||
#define P_FL_SET 0x2
|
#define P_FL_SET 0x2
|
||||||
|
|
||||||
extern int tells_server_version;
|
extern int tells_server_version;
|
||||||
|
extern int password_scheme;
|
||||||
|
|
||||||
|
#define PW_SCHEME_CHANGE_PW 1
|
||||||
|
#define PW_SCHEME_LOGIN 2
|
||||||
|
#define PW_SCHEME_GET_KEY_FAIL 4
|
||||||
|
|
||||||
|
|
||||||
extern int nw_get_prop(int object_type,
|
extern int nw_get_prop(int object_type,
|
||||||
uint8 *object_name, int object_namlen,
|
uint8 *object_name, int object_namlen,
|
||||||
@ -171,9 +179,12 @@ extern uint32 nw_new_create_prop(uint32 wanted_id,
|
|||||||
extern int get_guid(int *gid, int *uid, uint32 obj_id);
|
extern int get_guid(int *gid, int *uid, uint32 obj_id);
|
||||||
|
|
||||||
extern int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key);
|
extern int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key);
|
||||||
|
extern int nw_test_unenpasswd(uint32 obj_id, uint8 *password);
|
||||||
|
extern int nw_set_passwd(uint32 obj_id, char *password);
|
||||||
|
|
||||||
extern int nw_get_q_dirname(uint32 q_id, uint8 *buff);
|
extern int nw_get_q_dirname(uint32 q_id, uint8 *buff);
|
||||||
extern int nw_get_q_prcommand(uint32 q_id, uint8 *buff);
|
extern int nw_get_q_prcommand(uint32 q_id, uint8 *buff);
|
||||||
|
|
||||||
extern void nw_fill_standard(char *servername, ipxAddr_t *adr);
|
extern void nw_fill_standard(char *servername, ipxAddr_t *adr);
|
||||||
extern void nw_init_dbm(char *servername, ipxAddr_t *adr);
|
extern void nw_init_dbm(char *servername, ipxAddr_t *adr);
|
||||||
|
#endif
|
||||||
|
5
nwserv.c
5
nwserv.c
@ -1,4 +1,4 @@
|
|||||||
/* nwserv.c 08-Feb-96 */
|
/* nwserv.c 10-Feb-96 */
|
||||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -67,8 +67,9 @@ static uint16 sock_nummern [NEEDED_SOCKETS];
|
|||||||
|
|
||||||
int sockfd [NEEDED_SOCKETS];
|
int sockfd [NEEDED_SOCKETS];
|
||||||
static struct pollfd polls[NEEDED_POLLS];
|
static struct pollfd polls[NEEDED_POLLS];
|
||||||
|
#if 0
|
||||||
static uint16 spx_diag_socket; /* SPX DIAGNOSE SOCKET */
|
static uint16 spx_diag_socket; /* SPX DIAGNOSE SOCKET */
|
||||||
|
#endif
|
||||||
static ipxAddr_t nw386_adr; /* Address of NW-TEST Server */
|
static ipxAddr_t nw386_adr; /* Address of NW-TEST Server */
|
||||||
static int nw386_found = 0;
|
static int nw386_found = 0;
|
||||||
static int client_mode = 0;
|
static int client_mode = 0;
|
||||||
|
13
tools.h
13
tools.h
@ -1,4 +1,4 @@
|
|||||||
/* tools.h : 28-Jan-96 */
|
/* tools.h : 10-Feb-96 */
|
||||||
|
|
||||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
@ -16,8 +16,10 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
|
#ifndef _TOOLS_H_
|
||||||
|
#define _TOOLS_H_
|
||||||
|
|
||||||
/* Prozesse die tools verwenden */
|
/* processes which need tools */
|
||||||
#define NWSERV 1
|
#define NWSERV 1
|
||||||
#define NCPSERV 2
|
#define NCPSERV 2
|
||||||
#define NWCONN 3
|
#define NWCONN 3
|
||||||
@ -33,6 +35,9 @@ extern int x_x_xnewstr(uint8 **p, uint8 *s);
|
|||||||
extern char *xmalloc(uint size);
|
extern char *xmalloc(uint size);
|
||||||
extern char *xcmalloc(uint size);
|
extern char *xcmalloc(uint size);
|
||||||
extern int strmaxcpy(uint8 *dest, uint8 *source, int len);
|
extern int strmaxcpy(uint8 *dest, uint8 *source, int len);
|
||||||
|
#define xstrcpy(d, s) strmaxcpy((d), (s), sizeof(d)-1)
|
||||||
|
#define xstrmaxcpy(d, s, len) strmaxcpy((d), (s), min(sizeof(d)-1, (len)) )
|
||||||
|
|
||||||
extern void dprintf(char *p, ...);
|
extern void dprintf(char *p, ...);
|
||||||
extern void xdprintf(int dlevel, int mode, char *p, ...);
|
extern void xdprintf(int dlevel, int mode, char *p, ...);
|
||||||
extern void errorp(int mode, char *what, char *p, ...);
|
extern void errorp(int mode, char *what, char *p, ...);
|
||||||
@ -50,7 +55,7 @@ extern uint8 *upstr(uint8 *s);
|
|||||||
|
|
||||||
|
|
||||||
extern int nw_debug;
|
extern int nw_debug;
|
||||||
#ifdef DB
|
#if DO_DEBUG
|
||||||
# define DPRINTF(x) dprintf x
|
# define DPRINTF(x) dprintf x
|
||||||
# define XDPRINTF(x) xdprintf x
|
# define XDPRINTF(x) xdprintf x
|
||||||
# define D() XDPRINTF((3, 0, "Z: %d" , __LINE__));
|
# define D() XDPRINTF((3, 0, "Z: %d" , __LINE__));
|
||||||
@ -60,3 +65,5 @@ extern int nw_debug;
|
|||||||
# define D() /* */
|
# define D() /* */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* _TOOLS_H_ */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user