mars_nwe-0.96.pl09

This commit is contained in:
Mario Fetka 2011-11-13 00:38:56 +01:00
parent 28334ea9f1
commit fc81c57450
18 changed files with 341 additions and 120 deletions

View File

@ -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.

View File

@ -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
View 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.

View File

@ -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

View File

@ -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 */

View File

@ -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;
cd ..; fi
$MAKE -f $V_VPATH/makefile.unx $@ 2>&1 | tee $ERRFILE;
if [ $V_VPATH = '..' ] ; then
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 $@

View File

@ -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

View File

@ -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))

View File

@ -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

View File

@ -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)

108
ncpserv.c
View File

@ -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);
@ -847,21 +868,34 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
if (result) completition = (uint8) -result; if (result) completition = (uint8) -result;
} break; } break;
case 0x40: { /* change object password */ case 0x40: { /* change object password */
uint8 *p = rdata; if (password_scheme & PW_SCHEME_CHANGE_PW) {
NETOBJ obj; uint8 *p = rdata;
int result; uint8 oldpassword[50];
obj.type = GET_BE16(p); uint8 newpassword[50];
strmaxcpy((char*)obj.name, (char*)(p+3), *(p+2)); NETOBJ obj;
upstr(obj.name); int result;
if (0 == (result = find_obj_id(&obj, 0))) { obj.type = GET_BE16(p);
;; p+=2;
xstrmaxcpy(obj.name, p+1, (int) *p);
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))) {
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;
} else {
XDPRINTF((1, 0, "Change object password unencryted not enabled"));
completition=0xff;
} }
if (result < 0) completition = (uint8) -result; } break;
XDPRINTF((1, 0, "TODO: Change Obj PW from OBJECT='%s', result=%d",
obj.name, result));
completition=0xff;
} break;
case 0x41 : { /* add Bindery Object to Set */ case 0x41 : { /* add Bindery Object to Set */
uint8 *p = rdata; uint8 *p = rdata;
@ -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
View File

@ -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

View File

@ -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);
} }
U16_TO_BE16(0, my_addr.sock); if (sock_nr) {
U16_TO_BE16(*sock_nr, my_addr.sock);
} else {
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");

View File

@ -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
View File

@ -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
View File

@ -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

View File

@ -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
View File

@ -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_ */