mars_nwe-0.97.pl01
This commit is contained in:
parent
3c4372643c
commit
a584c2191f
24
connect.c
24
connect.c
@ -544,7 +544,7 @@ static int build_path( NW_PATH *path,
|
||||
int len,
|
||||
int only_dir)
|
||||
/*
|
||||
* fills path structur with the right values
|
||||
* fills path structure with the right values
|
||||
* if only_dir > 0, then the full path will be interpreted
|
||||
* as directory, in the other way, the last segment of path
|
||||
* will be interpreted as fn.
|
||||
@ -700,6 +700,7 @@ int conn_get_kpl_path(NW_PATH *nwpath, int dirhandle,
|
||||
} else if (dirhandle) lastdirhandle = dirhandle;
|
||||
#endif
|
||||
completition = build_path(nwpath, data, len, only_dir);
|
||||
XDPRINTF((5, 0, "conn_get_kpl_path %s", conn_get_nwpath_name(nwpath)));
|
||||
if (!completition) completition = build_verz_name(nwpath, dirhandle);
|
||||
return(completition);
|
||||
}
|
||||
@ -1049,7 +1050,7 @@ int insert_new_dir(NW_PATH *nwpath, int inode, int drive, int is_temp, int task)
|
||||
int freehandle = 0;
|
||||
int timedhandle = 0;
|
||||
|
||||
/* first look, wether drive is allready in use */
|
||||
/* first look, whether drive is allready in use */
|
||||
for (j = 0; j < (int)used_dirs; j++) {
|
||||
NW_DIR *d = &(dirs[j]);
|
||||
if (d->inode && !is_temp && !d->is_temp && (int)d->drive == drive) {
|
||||
@ -1183,9 +1184,9 @@ int nw_open_dir_handle( int dir_handle,
|
||||
completition = 0xff; /* Alle Rechte */
|
||||
}
|
||||
XDPRINTF((5,0,"NW_OPEN_DIR_2: completition = 0x%x",
|
||||
(int)completition));
|
||||
completition));
|
||||
} else {
|
||||
XDPRINTF((4,0,"NW_OPEN_DIR failed: completition = 0x%x", (int)completition));
|
||||
XDPRINTF((4,0,"NW_OPEN_DIR failed: completition = -0x%x", -completition));
|
||||
}
|
||||
return(completition);
|
||||
}
|
||||
@ -1291,13 +1292,12 @@ static int s_nw_scan_dir_info(int dir_handle,
|
||||
uint8 *subname, uint8 *subdatetime,
|
||||
uint8 *owner, uint8 *wild)
|
||||
{
|
||||
int volume;
|
||||
int searchsequence;
|
||||
int dir_id;
|
||||
int rights = nw_open_dir_handle(dir_handle, data, len,
|
||||
int volume;
|
||||
int searchsequence;
|
||||
int dir_id;
|
||||
int rights = nw_open_dir_handle(dir_handle, data, len,
|
||||
&volume, &dir_id, &searchsequence);
|
||||
|
||||
|
||||
if (rights > -1) {
|
||||
DIR_HANDLE *dh = &(dir_handles[dir_id-1]);
|
||||
struct stat stbuff;
|
||||
@ -1352,18 +1352,20 @@ int nw_scan_dir_info(int dir_handle, uint8 *data, int len, uint8 *subnr,
|
||||
int k = len;
|
||||
uint8 *p = data+len;
|
||||
uint8 dirname[256];
|
||||
while (k--) {
|
||||
while (k) {
|
||||
uint8 c = *--p;
|
||||
if (c == '/' || c == '\\' || c == ':') {
|
||||
p++;
|
||||
k++;
|
||||
break;
|
||||
}
|
||||
--k;
|
||||
}
|
||||
if (len && k < len) {
|
||||
strmaxcpy(dirname, p, len-k);
|
||||
len = k;
|
||||
} else dirname[0] = '\0';
|
||||
XDPRINTF((7, 0, "nw_scan_dir_info, dirname=`%s`, len=%d, k=%d",
|
||||
dirname, len , k));
|
||||
return(s_nw_scan_dir_info(dir_handle, data, len, subnr,
|
||||
subname, subdatetime, owner, dirname));
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* config.h: 01-Mar-96 */
|
||||
/* config.h: 14-Mar-96 */
|
||||
/* some of this config is needed by make, others by cc */
|
||||
#define DO_DEBUG 1 /* Compile in debug code */
|
||||
#define DO_TESTING 0
|
||||
@ -7,10 +7,12 @@
|
||||
# define FILENAME_NW_INI "./nw.ini" /* full name of ini (conf) file */
|
||||
# define PATHNAME_PROGS "." /* path location of progs */
|
||||
# define PATHNAME_BINDERY "." /* path location of bindery */
|
||||
# define FUNC_17_02_IS_DEBUG 1
|
||||
#else
|
||||
# define FILENAME_NW_INI "/etc/nwserv.conf" /* full name of ini (conf) file */
|
||||
# define PATHNAME_PROGS "/sbin" /* path location of progs */
|
||||
# define PATHNAME_BINDERY "/etc" /* path location of bindery */
|
||||
# define FUNC_17_02_IS_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define NETWORK_SERIAL_NMBR 0x44444444L /* Serial Number 4 Byte */
|
||||
|
19
makefile.unx
19
makefile.unx
@ -1,5 +1,5 @@
|
||||
#if 0
|
||||
#makefile.unx 08-Mar-96
|
||||
#makefile.unx 10-Mar-96
|
||||
#endif
|
||||
|
||||
VPATH=$(V_VPATH)
|
||||
@ -9,8 +9,9 @@ C=.c
|
||||
|
||||
V_H=0
|
||||
V_L=97
|
||||
P_L=0
|
||||
#define D_P_L 0
|
||||
P_L=1
|
||||
|
||||
#define D_P_L 1
|
||||
DISTRIB=mars_nwe
|
||||
#if D_P_L
|
||||
DISTRIBF=$(DISTRIB)-$(V_H).$(V_L).pl$(P_L)
|
||||
@ -160,20 +161,20 @@ echo "********************************************************"; \
|
||||
echo ""; \
|
||||
fi; cd $(OBJDIR) )
|
||||
|
||||
n_clean1:
|
||||
clean_d:
|
||||
cd $(VPATH) && (\
|
||||
find . \( -name .e.pck -o -name '~*' -o -name '*~' -o -name core \) \
|
||||
find $(DISTRIB) \( -name .e.pck -o -name '~*' -o -name '*~' -o -name core \) \
|
||||
-exec rm {} \; \
|
||||
; cd $(OBJDIR))
|
||||
|
||||
n_clean: n_clean1
|
||||
n_clean:
|
||||
rm -f *.o
|
||||
cd $(VPATH) && (rm -f $(PROGS); cd $(OBJDIR) )
|
||||
|
||||
n_distclean: n_clean
|
||||
n_distclean: n_clean clean_d
|
||||
cd $(VPATH) && (rm -f *.dir *.pag; cd $(OBJDIR))
|
||||
|
||||
n_make_dir: n_clean1
|
||||
make_dir:
|
||||
cd $(VPATH) && (rm -rf $(OBJDIR)/$(VPATH)/$(DISTRIB) \
|
||||
; mkdir $(DISTRIB) \
|
||||
; mkdir $(DISTRIB)/examples \
|
||||
@ -194,7 +195,7 @@ n_make_dir: n_clean1
|
||||
$(DISTRIB)/doc/. \
|
||||
; cd $(OBJDIR) )
|
||||
|
||||
n_diff: n_make_dir
|
||||
n_diff: make_dir clean_d
|
||||
cd $(VPATH) && ( \
|
||||
makepatch $(DISTRIB).org $(DISTRIB) > $(PATCHF) \
|
||||
; gzip -9 -f $(PATCHF) \
|
||||
|
22
ncpserv.c
22
ncpserv.c
@ -1,5 +1,5 @@
|
||||
/* ncpserv.c */
|
||||
#define REVISION_DATE "10-Mar-96"
|
||||
#define REVISION_DATE "14-Mar-96"
|
||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -496,6 +496,26 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
}
|
||||
break;
|
||||
|
||||
#if FUNC_17_02_IS_DEBUG
|
||||
case 0x02 : { /* I hope this is call isn't used */
|
||||
/* now missused as a debug switch :) */
|
||||
struct XDATA {
|
||||
uint8 nw_debug; /* old level */
|
||||
} *xdata = (struct XDATA*) responsedata;
|
||||
errorp(2, "0x17, ufunc=2", "Got debugchange =%d for module=%d",
|
||||
(int)*(rdata+1), (int) *rdata);
|
||||
if (*rdata == NWCONN)
|
||||
return(-1); /* let nwconn do the call */
|
||||
|
||||
if (*rdata == NCPSERV) {
|
||||
xdata->nw_debug = (uint8) nw_debug;
|
||||
nw_debug = (int) *(rdata+1);
|
||||
data_len = 1;
|
||||
} else completition=0xff;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 0x0c : { /* Verify Serialization */
|
||||
completition=0xff;
|
||||
}
|
||||
|
9
net.h
9
net.h
@ -116,6 +116,15 @@
|
||||
# define DO_DEBUG 1
|
||||
#endif
|
||||
|
||||
#if DO_DEBUG
|
||||
# ifndef FUNC_17_02_IS_DEBUG
|
||||
# define FUNC_17_02_IS_DEBUG 0
|
||||
# endif
|
||||
#else
|
||||
# undef FUNC_17_02_IS_DEBUG
|
||||
# define FUNC_17_02_IS_DEBUG 0
|
||||
#endif
|
||||
|
||||
#ifndef MAX_CONNECTIONS
|
||||
# define MAX_CONNECTIONS 5 /* maximum Number of Connections */
|
||||
#endif
|
||||
|
40
nwclient.c
40
nwclient.c
@ -244,8 +244,6 @@ static int do_17_17(void)
|
||||
return(-1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int get_network_serial_number(void)
|
||||
{
|
||||
uint8 data[] = {0, 1, 0x12};
|
||||
@ -317,6 +315,26 @@ static int file_search_cont(DIR_IDS *di, int seq,
|
||||
return(-1);
|
||||
}
|
||||
|
||||
static int scan_dir_info(int dirhandle, char *path, int sub_dir)
|
||||
{
|
||||
uint8 *p=requestdata;
|
||||
uint8 pathlen= (path) ? strlen(path) : 0;
|
||||
*p++ = 0;
|
||||
*p++ = pathlen+4;
|
||||
*p++ = 0x2;
|
||||
|
||||
*p++ = dirhandle;
|
||||
U16_TO_BE16(sub_dir, p);
|
||||
p+=2;
|
||||
*p++ = pathlen;
|
||||
memcpy(p, path, pathlen);
|
||||
VDATA(0x16, pathlen+7 , "SCAN DIR INFO");
|
||||
if (!handle_event()) {
|
||||
return((int)GET_BE16(responsedata+26));
|
||||
}
|
||||
return(-1);
|
||||
}
|
||||
|
||||
static int allocate_dir_handle(int dirhandle,
|
||||
int drive,
|
||||
char *path,
|
||||
@ -601,8 +619,7 @@ static int read_datei(int fh, int offs, int size)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
static void test1(void)
|
||||
{
|
||||
int dirhandle = allocate_dir_handle(0, 'F', "SYS:PUBLIC", 0);
|
||||
@ -611,6 +628,21 @@ static void test1(void)
|
||||
scan_irgendwas(dirhandle, 6, "NET$LOG.DAT");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void test1(void)
|
||||
{
|
||||
int dirhandle = allocate_dir_handle(0, 'd', "SYS:", 1);
|
||||
if (dirhandle > -1) {
|
||||
int i;
|
||||
scan_dir_info(dirhandle, "SYSTEM", 1);
|
||||
scan_dir_info(dirhandle, "SYSTE*", 1);
|
||||
i = scan_dir_info(dirhandle, "SYSTEM\\*", 1);
|
||||
while (i > -1)
|
||||
i = scan_dir_info(dirhandle, "", i+1);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void test2(void)
|
||||
{
|
||||
|
58
nwconn.c
58
nwconn.c
@ -1,4 +1,4 @@
|
||||
/* nwconn.c 01-Mar-96 */
|
||||
/* nwconn.c 14-Mar-96 */
|
||||
/* one process / connection */
|
||||
|
||||
/* (C)opyright (C) 1993,1996 Martin Stover, Marburg, Germany
|
||||
@ -244,9 +244,10 @@ static void handle_ncp_serv()
|
||||
/******** Scan Dir Info ****************/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 div[3]; /* 0x0, dlen, typ */
|
||||
uint8 div[3]; /* 0x0, dlen, typ */
|
||||
uint8 dir_handle; /* Verzeichnis Handle */
|
||||
uint8 sub_dir_nmbr[2]; /* HI LOW */
|
||||
/* firsttime 1 */
|
||||
uint8 len; /* kann auch 0 sein */
|
||||
uint8 path[2];
|
||||
} *input = (struct INPUT *) (ncprequest);
|
||||
@ -635,8 +636,27 @@ static void handle_ncp_serv()
|
||||
#if 1
|
||||
case 0x17 : { /* FILE SERVER ENVIRONMENT */
|
||||
/* uint8 len = *(requestdata+1); */
|
||||
uint8 ufunc = *(requestdata+2);
|
||||
uint8 ufunc = *(requestdata+2);
|
||||
uint8 *rdata = requestdata+3;
|
||||
|
||||
switch (ufunc) {
|
||||
|
||||
#if FUNC_17_02_IS_DEBUG
|
||||
case 0x02 : {
|
||||
/* I hope this is call isn't used */
|
||||
/* now missused as a debug switch :) */
|
||||
struct XDATA {
|
||||
uint8 nw_debug; /* old level */
|
||||
} *xdata = (struct XDATA*) responsedata;
|
||||
if (*rdata == NWCONN) {
|
||||
xdata->nw_debug = (uint8)org_nw_debug;
|
||||
nw_debug = org_nw_debug = (int) *(rdata+1);
|
||||
data_len = 1;
|
||||
} else completition=0xff;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 0x14:
|
||||
case 0x18: { /* ncpserv have change the structure */
|
||||
struct INPUT {
|
||||
@ -815,6 +835,20 @@ static void handle_ncp_serv()
|
||||
else completition=0xfb; /* request not known */
|
||||
} break;
|
||||
|
||||
case 0x3d : { /* commit file, flush file buffers */
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 reserve;
|
||||
uint8 ext_fhandle[2]; /* all zero */
|
||||
uint8 fhandle[4]; /* filehandle */
|
||||
} *input = (struct INPUT *)ncprequest;
|
||||
uint32 fhandle = GET_BE32(input->fhandle);
|
||||
XDPRINTF((2,0, "TODO: COMMIT FILE:fhandle=%ld", fhandle));
|
||||
/* TODO */
|
||||
;
|
||||
} break;
|
||||
|
||||
|
||||
case 0x3e : { /* FILE SEARCH INIT */
|
||||
/* returns dhandle for searchings */
|
||||
int dir_handle = (int)*requestdata;
|
||||
@ -840,18 +874,6 @@ static void handle_ncp_serv()
|
||||
} else completition = (uint8) -rights;
|
||||
} break;
|
||||
|
||||
case 0x3d : { /* commit file, flush file buffers */
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 reserve;
|
||||
uint8 ext_fhandle[2]; /* all zero */
|
||||
uint8 fhandle[4]; /* filehandle */
|
||||
} *input = (struct INPUT *)ncprequest;
|
||||
uint32 fhandle = GET_BE32(input->fhandle);
|
||||
XDPRINTF((2,0, "TODO: COMMIT FILE:fhandle=%ld", fhandle));
|
||||
/* TODO */
|
||||
;
|
||||
} break;
|
||||
|
||||
case 0x3f : { /* file search continue */
|
||||
/* Dir_id is from file search init */
|
||||
@ -896,7 +918,7 @@ static void handle_ncp_serv()
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x40 : /* GET File Mode ?? */
|
||||
case 0x40 : /* Search for a File */
|
||||
{
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
@ -907,8 +929,8 @@ static void handle_ncp_serv()
|
||||
uint8 data[2]; /* Name */
|
||||
} *input = (struct INPUT *)ncprequest;
|
||||
struct OUTPUT {
|
||||
uint8 sequenz[2]; /* Antwort Sequenz */
|
||||
uint8 reserve2[2]; /* z.B 0x0 0x0 */
|
||||
uint8 sequenz[2]; /* answer sequence */
|
||||
uint8 reserved[2]; /* z.B 0x0 0x0 */
|
||||
union {
|
||||
NW_DIR_INFO d;
|
||||
NW_FILE_INFO f;
|
||||
|
3
nwfile.c
3
nwfile.c
@ -357,6 +357,9 @@ int nw_lock_datei(int fhandle, int offset, int size, int do_lock)
|
||||
flockd.l_start = offset;
|
||||
flockd.l_len = size;
|
||||
result = fcntl(fh->fd, F_SETLK, &flockd);
|
||||
XDPRINTF((2, 0, "nw_%s_datei result=%d, fh=%d, offset=%d, size=%d",
|
||||
(do_lock) ? "lock" : "unlock", result, fhandle, offset, size));
|
||||
|
||||
if (!result) return(0);
|
||||
else return(-0x21); /* LOCK Violation */
|
||||
}
|
||||
|
16
tools.c
16
tools.c
@ -31,6 +31,8 @@ FILE *logfile=stdout;
|
||||
|
||||
static int in_module=0; /* in which process i am ? */
|
||||
static int connection=0; /* which connection (nwconn) */
|
||||
static int my_pid = -1;
|
||||
static void (*sigsegv_func)(int isig);
|
||||
static char *modnames[] =
|
||||
{ "???????",
|
||||
"NWSERV ",
|
||||
@ -121,7 +123,7 @@ void errorp(int mode, char *what, char *p, ...)
|
||||
int errnum = errno;
|
||||
FILE *lologfile = logfile;
|
||||
while (1) {
|
||||
if (mode) fprintf(lologfile, "\n!! %s %d:PANIC !!\n", get_modstr(), connection);
|
||||
if (mode==1) fprintf(lologfile, "\n!! %s %d:PANIC !!\n", get_modstr(), connection);
|
||||
if (errnum >= 0 && errnum < _sys_nerr)
|
||||
fprintf(lologfile, "%s %d:%s:%s\n", get_modstr(), connection, what, _sys_errlist[errnum]);
|
||||
else
|
||||
@ -219,10 +221,11 @@ void get_ini_debug(int module)
|
||||
|
||||
static void sig_segv(int isig)
|
||||
{
|
||||
char *s= "PANIC signal SIGSEGV" ;
|
||||
XDPRINTF((0, 0, s));
|
||||
fprintf(stderr, s);
|
||||
exit(99);
|
||||
char *s= "!!!! PANIC signal SIGSEGV at pid=%d !!!!!\n" ;
|
||||
XDPRINTF((0, 0, s, my_pid));
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, s, my_pid);
|
||||
(*sigsegv_func)(isig);
|
||||
}
|
||||
|
||||
void init_tools(int module, int conn)
|
||||
@ -269,7 +272,8 @@ void init_tools(int module, int conn)
|
||||
XDPRINTF((1, 0, "Starting Version: %d.%02dpl%d",
|
||||
_VERS_H_, _VERS_L_, _VERS_P_ ));
|
||||
}
|
||||
signal(SIGSEGV, sig_segv);
|
||||
sigsegv_func = signal(SIGSEGV, sig_segv);
|
||||
my_pid = getpid();
|
||||
}
|
||||
|
||||
void exit_tools(int what)
|
||||
|
Loading…
Reference in New Issue
Block a user