mars_nwe-0.96.pl02

This commit is contained in:
Mario Fetka 2011-11-13 00:38:55 +01:00
parent cfe799f9df
commit 475b65b9b9
17 changed files with 510 additions and 344 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 : 20-Dec-95 Aenderungen in mars_nwe bis zum : 02-Jan-96
-------------------------------- --------------------------------
Erste 'oeffentliche' Version Erste 'oeffentliche' Version
^^^^^^^^^^ VERSION 0.94 ^^^^^^^^ ^^^^^^^^^^ VERSION 0.94 ^^^^^^^^
@ -39,4 +39,10 @@ Erste 'oeffentliche' Version
- Server kann sich als 2.15 Server melden oder als 3.11 . - Server kann sich als 2.15 Server melden oder als 3.11 .
- Drucken mit OLD Job's (pre 3.11) Struktur eingebaut. - Drucken mit OLD Job's (pre 3.11) Struktur eingebaut.
^^^^^^^^^^ VERSION 0.96 ^^^^^^^^ ^^^^^^^^^^ VERSION 0.96 ^^^^^^^^
- Direktory Search Wildcard Fehler '????????.???' korrigiert.
- delete mit wildcards eingebaut.
- Noch einen Wildcard Fehler korrigiert. (James MacLean)
- Debug Routine und Levels veraendert.
- Packet Groesse > 546 Byte erlaubt.

187
connect.c
View File

@ -1,4 +1,4 @@
/* connect.h 18-Dec-95 */ /* connect.c 02-Jan-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
@ -25,7 +25,8 @@
#include <sys/errno.h> #include <sys/errno.h>
extern int errno; extern int errno;
#define TEST_FNAME "PRINT.000" /* #define TEST_FNAME "PRINT.000"
*/
static int test_handle=-1; static int test_handle=-1;
static int default_uid=-1; static int default_uid=-1;
@ -256,7 +257,7 @@ void set_guid(int gid, int uid)
|| seteuid(uid) == -1 ) { || seteuid(uid) == -1 ) {
DPRINTF(("SET GID=%d, UID=%d failed\n", gid, uid)); DPRINTF(("SET GID=%d, UID=%d failed\n", gid, uid));
set_default_guid(); set_default_guid();
} else XDPRINTF((2,"SET GID=%d, UID=%d OK\n", gid, uid)); } else XDPRINTF((5,0,"SET GID=%d, UID=%d OK", gid, uid));
} }
static char *get_nwpath_name(NW_PATH *p) static char *get_nwpath_name(NW_PATH *p)
@ -289,10 +290,20 @@ static int x_str_match(uint8 *s, uint8 *p)
if (*p++ != *s++) return(0); if (*p++ != *s++) return(0);
break; break;
case '?' : if (! *s++) return(0); /* one character */ case '?' : if ((sc = *s++) == '.') {
uint8 *pp=p;
while (*pp) {
if (*pp++ == '.') p=pp;
}
} else if (!sc) return(1); /* one character */
break; break;
case '.' : if (!*s && !*p) return(1); /* point at end */ case '.' :
#if 0
if (!*s && !*p) return(1); /* point at end */
#else
if (!*s && (!*p || *p == '*' || *p == '?')) return(1);
#endif
if (pc != *s++) return(0); if (pc != *s++) return(0);
if (*p == '*') return(1); if (*p == '*') return(1);
break; break;
@ -377,6 +388,71 @@ static int str_match(uint8 *s, uint8 *p, uint8 options)
return(x_str_match(s, p)); return(x_str_match(s, p));
} }
typedef struct {
int attrib;
struct stat statb;
} FUNC_SEARCH;
static int func_search_entry(NW_PATH *nwpath, int attrib,
int (*fs_func)(NW_PATH *nwpath, FUNC_SEARCH *fs), FUNC_SEARCH *fs)
/* returns > 0 if OK < 1 if not ok or not found */
{
struct dirent* dirbuff;
DIR *f;
int result=0;
int okflag=0;
char xkpath[256];
uint8 entry[256];
int volume = nwpath->volume;
uint8 soptions;
FUNC_SEARCH fs_local;
if (!fs) fs = &fs_local;
fs->attrib = attrib;
if (volume < 0 || volume >= used_vols) return(-1); /* something wrong */
else soptions = vols[volume].options;
strcpy(entry, nwpath->fn);
if (soptions & 1) downstr(entry); /* now downshift chars */
nwpath->fn[0] = '\0';
strcpy(xkpath, build_unix_name(nwpath, 1|2));
XDPRINTF((5,0,"func_search_entry attrib=0x%x path:%s:, xkpath:%s:, entry:%s:",
attrib, nwpath->path, xkpath, entry));
if ((f=opendir(xkpath)) != (DIR*)NULL) {
char *kpath=xkpath+strlen(xkpath);
*kpath++ = '/';
while ((dirbuff = readdir(f)) != (struct dirent*)NULL){
okflag = 0;
if (dirbuff->d_ino) {
uint8 *name=(uint8*)(dirbuff->d_name);
okflag = (name[0] != '.' &&
( (entry[0] == '*' && entry[1] == '\0')
|| (!strcmp(name, entry))
|| str_match(name, entry, soptions)));
if (okflag) {
*kpath = '\0';
strcpy(kpath, name);
if (!stat(xkpath, &(fs->statb))) {
okflag = ( ( ( (fs->statb.st_mode & S_IFMT) == S_IFDIR) && (attrib & 0x10))
|| ( ( (fs->statb.st_mode & S_IFMT) != S_IFDIR) && !(attrib & 0x10)));
if (okflag){
strcpy(nwpath->fn, name);
if (soptions & 1) upstr(nwpath->fn);
XDPRINTF((5,0,"FOUND=:%s: attrib=0x%x", nwpath->fn, fs->statb.st_mode));
result = (*fs_func)(nwpath, fs);
if (result < 0) break;
else result=1;
}
} else okflag = 0;
}
XDPRINTF((6,0, "NAME=:%s: OKFLAG %d", name, okflag));
} /* if */
} /* while */
closedir(f);
} /* if */
return(result);
}
static int get_dir_entry(NW_PATH *nwpath, static int get_dir_entry(NW_PATH *nwpath,
int *sequence, int *sequence,
int attrib, int attrib,
@ -398,7 +474,7 @@ static int get_dir_entry(NW_PATH *nwpath,
nwpath->fn[0] = '\0'; nwpath->fn[0] = '\0';
strcpy(xkpath, build_unix_name(nwpath, 1|2)); strcpy(xkpath, build_unix_name(nwpath, 1|2));
XDPRINTF((2,"get_dir_entry attrib=0x%x path:%s:, xkpath:%s:, entry:%s:\n", XDPRINTF((5,0,"get_dir_entry attrib=0x%x path:%s:, xkpath:%s:, entry:%s:",
attrib, nwpath->path, xkpath, entry)); attrib, nwpath->path, xkpath, entry));
if ((f=opendir(xkpath)) != (DIR*)NULL) { if ((f=opendir(xkpath)) != (DIR*)NULL) {
@ -424,12 +500,12 @@ static int get_dir_entry(NW_PATH *nwpath,
if (okflag){ if (okflag){
strcpy(nwpath->fn, name); strcpy(nwpath->fn, name);
if (soptions & 1) upstr(nwpath->fn); if (soptions & 1) upstr(nwpath->fn);
XDPRINTF((2,"FOUND=:%s: attrib=0x%x\n", nwpath->fn, statb->st_mode)); XDPRINTF((5,0,"FOUND=:%s: attrib=0x%x", nwpath->fn, statb->st_mode));
break; /* ready */ break; /* ready */
} }
} else okflag = 0; } else okflag = 0;
} }
XDPRINTF((4, "NAME=:%s: OKFLAG %d\n", name, okflag)); XDPRINTF((6,0, "NAME=:%s: OKFLAG %d", name, okflag));
} /* if */ } /* if */
} /* while */ } /* while */
*sequence = (int) telldir(f); *sequence = (int) telldir(f);
@ -457,7 +533,7 @@ static int get_dh_entry(DIR_HANDLE *dh,
if ( (uint16)*sequence == MAX_U16) *sequence = 0; if ( (uint16)*sequence == MAX_U16) *sequence = 0;
seekdir(f, (long) *sequence); seekdir(f, (long) *sequence);
XDPRINTF((2,"get_dh_entry attrib=0x%x path:%s:, entry:%s:\n", XDPRINTF((5,0,"get_dh_entry attrib=0x%x path:%s:, entry:%s:",
attrib, dh->unixname, entry)); attrib, dh->unixname, entry));
while ((dirbuff = readdir(f)) != (struct dirent*)NULL){ while ((dirbuff = readdir(f)) != (struct dirent*)NULL){
@ -471,7 +547,7 @@ static int get_dh_entry(DIR_HANDLE *dh,
if (okflag) { if (okflag) {
strcpy(dh->kpath, name); strcpy(dh->kpath, name);
XDPRINTF((2,"get_dh_entry Name=%s unixname=%s\n", XDPRINTF((5,0,"get_dh_entry Name=%s unixname=%s",
name, dh->unixname)); name, dh->unixname));
if (!stat(dh->unixname, statb)) { if (!stat(dh->unixname, statb)) {
@ -592,7 +668,7 @@ static int nw_path_ok(NW_PATH *nwpath)
if (!stat(build_unix_name(nwpath, 1 | 2 ), &stbuff) if (!stat(build_unix_name(nwpath, 1 | 2 ), &stbuff)
&& (stbuff.st_mode & S_IFMT) == S_IFDIR) result=stbuff.st_ino; && (stbuff.st_mode & S_IFMT) == S_IFDIR) result=stbuff.st_ino;
else { else {
XDPRINTF((2, "NW_PATH_OK failed:`%s`\n", get_nwpath_name(nwpath))); XDPRINTF((4,0, "NW_PATH_OK failed:`%s`", get_nwpath_name(nwpath)));
} }
return(result); return(result);
} }
@ -630,7 +706,7 @@ static int build_verz_name(NW_PATH *nwpath, /* gets complete path */
int state = 0; int state = 0;
while ((!completition) && (w = *p++) > 0){ while ((!completition) && (w = *p++) > 0){
if (!state){ if (!state){
XDPRINTF((2,"in build_verz_name path=:%s:\n", nwpath->path)); XDPRINTF((5,0,"in build_verz_name path=:%s:", nwpath->path));
if (w == '.') state = 20; if (w == '.') state = 20;
else if (w == '/') state = 30; else if (w == '/') state = 30;
else state++; else state++;
@ -743,7 +819,7 @@ static uint16 un_time_2_nw(time_t time, uint8 *d)
static int get_file_attrib(NW_FILE_INFO *f, struct stat *stb, static int get_file_attrib(NW_FILE_INFO *f, struct stat *stb,
NW_PATH *nwpath) NW_PATH *nwpath)
{ {
XDPRINTF((2, "get_file_attrib of %s\n", get_nwpath_name(nwpath) )); XDPRINTF((5,0, "get_file_attrib of %s", get_nwpath_name(nwpath) ));
strncpy(f->name, nwpath->fn, sizeof(f->name)); strncpy(f->name, nwpath->fn, sizeof(f->name));
/* Attribute */ /* Attribute */
/* 0x20 Archive Flag */ /* 0x20 Archive Flag */
@ -766,7 +842,7 @@ static int get_file_attrib(NW_FILE_INFO *f, struct stat *stb,
static int get_dir_attrib(NW_DIR_INFO *d, struct stat *stb, static int get_dir_attrib(NW_DIR_INFO *d, struct stat *stb,
NW_PATH *nwpath) NW_PATH *nwpath)
{ {
XDPRINTF((2, "get_dir_attrib of %s\n", get_nwpath_name(nwpath))); XDPRINTF((5,0, "get_dir_attrib of %s", get_nwpath_name(nwpath)));
strncpy(d->name, nwpath->fn, sizeof(d->name)); strncpy(d->name, nwpath->fn, sizeof(d->name));
d->attrib = 0x10; /* Verzeichnis */ d->attrib = 0x10; /* Verzeichnis */
@ -816,16 +892,16 @@ int nw_creat_open_file(int dir_handle, uint8 *data, int len,
if (creatmode) { /* creat File */ if (creatmode) { /* creat File */
if (creatmode & 0x2) { /* creatnew */ if (creatmode & 0x2) { /* creatnew */
if (!stat(fh->name, &stbuff)) { if (!stat(fh->name, &stbuff)) {
XDPRINTF((2,"CREAT File exist!! :%s:\n", fh->name)); XDPRINTF((5,0,"CREAT File exist!! :%s:", fh->name));
fh->fd = -1; fh->fd = -1;
completition = -0x85; /* No Priv */ completition = -0x85; /* No Priv */
} else { } else {
XDPRINTF((2,"CREAT FILE:%s: Handle=%d\n", fh->name, fhandle)); XDPRINTF((5,0,"CREAT FILE:%s: Handle=%d", fh->name, fhandle));
fh->fd = creat(fh->name, 0777); fh->fd = creat(fh->name, 0777);
if (fh->fd < 0) completition = -0x84; /* no create Rights */ if (fh->fd < 0) completition = -0x84; /* no create Rights */
} }
} else { } else {
XDPRINTF((2,"CREAT FILE, ever with attrib:0x%x, access:0x%x, fh->name:%s: handle:%d\n", XDPRINTF((5,0,"CREAT FILE, ever with attrib:0x%x, access:0x%x, fh->name:%s: handle:%d",
attrib, access, fh->name, fhandle)); attrib, access, fh->name, fhandle));
fh->fd = open(fh->name, O_CREAT|O_TRUNC|O_RDWR, 0777); fh->fd = open(fh->name, O_CREAT|O_TRUNC|O_RDWR, 0777);
if (fh->fd < 0) completition = -0x85; /* no delete /create Rights */ if (fh->fd < 0) completition = -0x85; /* no delete /create Rights */
@ -842,7 +918,7 @@ int nw_creat_open_file(int dir_handle, uint8 *data, int len,
int acm = (access & 2) ? (int) O_RDWR /*|O_CREAT*/ : (int)O_RDONLY; int acm = (access & 2) ? (int) O_RDWR /*|O_CREAT*/ : (int)O_RDONLY;
if ( (!statr && (stbuff.st_mode & S_IFMT) != S_IFDIR) if ( (!statr && (stbuff.st_mode & S_IFMT) != S_IFDIR)
|| (statr && (acm & O_CREAT))){ || (statr && (acm & O_CREAT))){
XDPRINTF((2,"OPEN FILE with attrib:0x%x, access:0x%x, fh->name:%s: fhandle=%d\n",attrib,access, fh->name, fhandle)); XDPRINTF((5,0,"OPEN FILE with attrib:0x%x, access:0x%x, fh->name:%s: fhandle=%d",attrib,access, fh->name, fhandle));
fh->fd = open(fh->name, acm, 0777); fh->fd = open(fh->name, acm, 0777);
fh->offd = 0L; fh->offd = 0L;
if (fh->fd > -1) { if (fh->fd > -1) {
@ -861,7 +937,7 @@ int nw_creat_open_file(int dir_handle, uint8 *data, int len,
} }
} }
XDPRINTF((2,"OPEN FILE not OK ! fh->name:%s: fhandle=%d\n",fh->name, fhandle)); XDPRINTF((5,0,"OPEN FILE not OK ! fh->name:%s: fhandle=%d",fh->name, fhandle));
free_file_handle(fhandle); free_file_handle(fhandle);
#ifdef TEST_FNAME #ifdef TEST_FNAME
if (got_testfn) { if (got_testfn) {
@ -873,20 +949,23 @@ int nw_creat_open_file(int dir_handle, uint8 *data, int len,
} else return(-0x81); /* no more File Handles */ } else return(-0x81); /* no more File Handles */
} }
int nw_delete_datei(int dir_handle, uint8 *data, int len) static int do_delete_file(NW_PATH *nwpath, FUNC_SEARCH *fs)
/* TODO: handle wildcards !!! */ {
char unname[256];
strcpy(unname, build_unix_name(nwpath, 0));
XDPRINTF((5,0,"DELETE FILE unname:%s:", unname));
if (!unlink(unname)) return(0);
return(-0x8a); /* NO Delete Privileges */
}
int nw_delete_datei(int dir_handle, uint8 *data, int len)
{ {
NW_PATH nwpath; NW_PATH nwpath;
int completition = get_kpl_path(&nwpath, dir_handle, data, len, 0); int completition = get_kpl_path(&nwpath, dir_handle, data, len, 0);
if (completition > -1) { if (completition > -1) {
char unname[256]; completition = func_search_entry(&nwpath, 0x6, do_delete_file, NULL);
struct stat stbuff; if (completition < 0) return(completition);
strcpy(unname, build_unix_name(&nwpath, 0)); else if (!completition) return(-0xff);
XDPRINTF((2,"DELETE FILE unname:%s:\n", unname));
if (!stat(unname, &stbuff)){
if (!unlink(unname)) return(0);
return(-0x8a); /* NO Delete Privileges */
} else completition= -0xff; /* No Files Found */
} }
return(completition); return(completition);
} }
@ -903,7 +982,7 @@ int nw_chmod_datei(int dir_handle, uint8 *data, int len, int modus)
} }
if (completition < 0) return(completition); if (completition < 0) return(completition);
strcpy(unname, build_unix_name(&nwpath, 2)); strcpy(unname, build_unix_name(&nwpath, 2));
XDPRINTF((2,"CHMOD DATEI unname:%s:\n", unname)); XDPRINTF((5,0,"CHMOD DATEI unname:%s:", unname));
if (!stat(unname, &stbuff)){ if (!stat(unname, &stbuff)){
return(0); return(0);
} }
@ -992,7 +1071,7 @@ int nw_write_datei(int fhandle, uint8 *data, int size, uint32 offset)
flockd.l_len = 0; flockd.l_len = 0;
#if HAVE_TLI #if HAVE_TLI
result = fcntl(fh->fd, F_FREESP, &flockd); result = fcntl(fh->fd, F_FREESP, &flockd);
XDPRINTF((2,"File %s is stripped, result=%d\n", fh->name, result)); XDPRINTF((5,0,"File %s is stripped, result=%d", fh->name, result));
#endif #endif
return(result); return(result);
} }
@ -1079,11 +1158,11 @@ int nw_mk_rd_dir(int dir_handle, uint8 *data, int len, int mode)
#endif #endif
if (mode) { if (mode) {
XDPRINTF((2,"MKDIR dirname:%s:\n", unname)); XDPRINTF((5,0,"MKDIR dirname:%s:", unname));
if (!mkdir(unname, 0777)) return(0); if (!mkdir(unname, 0777)) return(0);
completition = -0x84; /* No Create Priv.*/ /* -0x9f Direktory Aktive */ completition = -0x84; /* No Create Priv.*/ /* -0x9f Direktory Aktive */
} else { /* rmdir */ } else { /* rmdir */
XDPRINTF((2,"RMDIR dirname:%s:\n", unname)); XDPRINTF((5,0,"RMDIR dirname:%s:", unname));
if (!rmdir(unname)) { if (!rmdir(unname)) {
NW_DIR *d=&(dirs[0]); NW_DIR *d=&(dirs[0]);
int j = 0; int j = 0;
@ -1312,7 +1391,7 @@ int nw_search(uint8 *info,
{ {
NW_PATH nwpath; NW_PATH nwpath;
int completition = get_kpl_path(&nwpath, dirhandle, data, len, 0); int completition = get_kpl_path(&nwpath, dirhandle, data, len, 0);
XDPRINTF((2,"nw_search path:%s:, fn:%s:, completition:0x%x\n", XDPRINTF((5,0,"nw_search path:%s:, fn:%s:, completition:0x%x",
nwpath.path, nwpath.fn, completition)); nwpath.path, nwpath.fn, completition));
if (completition > -1) { if (completition > -1) {
struct stat stbuff; struct stat stbuff;
@ -1381,7 +1460,7 @@ int nw_alloc_dir_handle( int dir_handle, /* Suche ab Pfad dirhandle */
int inode=get_kpl_path(&nwpath, dir_handle, data, len, 1); int inode=get_kpl_path(&nwpath, dir_handle, data, len, 1);
if (inode > -1) if (inode > -1)
inode = insert_new_dir(&nwpath, inode, driveletter, is_temphandle, task); inode = insert_new_dir(&nwpath, inode, driveletter, is_temphandle, task);
XDPRINTF((2,"Allocate %shandle:%s, Handle=%d, drive=%d, result=0x%x\n", XDPRINTF((5,0,"Allocate %shandle:%s, Handle=%d, drive=%d, result=0x%x",
(is_temphandle) ? "Temp" : "Perm", get_nwpath_name(&nwpath), (is_temphandle) ? "Temp" : "Perm", get_nwpath_name(&nwpath),
dir_handle, driveletter, inode)); dir_handle, driveletter, inode));
return(inode); return(inode);
@ -1404,7 +1483,7 @@ int nw_open_dir_handle( int dir_handle,
NW_PATH nwpath; NW_PATH nwpath;
int completition = get_kpl_path(&nwpath, dir_handle, data, len, 1); int completition = get_kpl_path(&nwpath, dir_handle, data, len, 1);
if (completition > -1) { if (completition > -1) {
XDPRINTF((2,"NW_OPEN_DIR: completition = 0x%x; nwpath= %s\n", XDPRINTF((5,0,"NW_OPEN_DIR: completition = 0x%x; nwpath= %s",
(int)completition, get_nwpath_name(&nwpath) )); (int)completition, get_nwpath_name(&nwpath) ));
completition = new_dir_handle((ino_t)completition, &nwpath); completition = new_dir_handle((ino_t)completition, &nwpath);
@ -1415,10 +1494,10 @@ int nw_open_dir_handle( int dir_handle,
*searchsequence = MAX_U16; *searchsequence = MAX_U16;
completition = 0xff; /* Alle Rechte */ completition = 0xff; /* Alle Rechte */
} }
XDPRINTF((2,"NW_OPEN_DIR_2: completition = 0x%x\n", XDPRINTF((5,0,"NW_OPEN_DIR_2: completition = 0x%x",
(int)completition)); (int)completition));
} else { } else {
XDPRINTF((2,"NW_OPEN_DIR failed: completition = 0x%x\n", (int)completition)); XDPRINTF((4,0,"NW_OPEN_DIR failed: completition = 0x%x", (int)completition));
} }
return(completition); return(completition);
} }
@ -1445,7 +1524,7 @@ int nw_set_dir_handle(int targetdir, int dir_handle,
if (inode > -1){ if (inode > -1){
if (targetdir > 0 && --targetdir < used_dirs if (targetdir > 0 && --targetdir < used_dirs
&& dirs[targetdir].is_temp != 2) { /* not a spez. temphandle */ && dirs[targetdir].is_temp != 2) { /* not a spez. temphandle */
XDPRINTF((2,"Change dhandle:%d -> `%s`\n", targetdir+1, get_nwpath_name(&nwpath))); XDPRINTF((5,0,"Change dhandle:%d -> `%s`", targetdir+1, get_nwpath_name(&nwpath)));
return(change_dir_entry(&dirs[targetdir], nwpath.volume, nwpath.path, inode, -1, -1, 0, task)); return(change_dir_entry(&dirs[targetdir], nwpath.volume, nwpath.path, inode, -1, -1, 0, task));
/* here the existing handle is only modified */ /* here the existing handle is only modified */
} else return(-0x9b); /* BAD DIR Handle */ } else return(-0x9b); /* BAD DIR Handle */
@ -1464,7 +1543,7 @@ int nw_get_directory_path(int dir_handle, uint8 *name)
if (name[result-1] == '/') name[--result] = '\0'; if (name[result-1] == '/') name[--result] = '\0';
} else result = -0x98; } else result = -0x98;
} }
XDPRINTF((2,"nw_get_directory_path:%s: Handle=%d, result=0x%x\n", name, dir_handle+1, result)); XDPRINTF((5,0,"nw_get_directory_path:%s: Handle=%d, result=0x%x", name, dir_handle+1, result));
return(result); return(result);
} }
@ -1476,7 +1555,7 @@ int nw_get_vol_number(int dir_handle)
result = dirs[dir_handle].volume; result = dirs[dir_handle].volume;
if (result >= used_vols) result = -0x98; /* Falsches Volume */ if (result >= used_vols) result = -0x98; /* Falsches Volume */
} }
XDPRINTF((2,"nw_get_vol_number:0x%x: von Handle=%d\n", result, dir_handle+1)); XDPRINTF((5,0,"nw_get_vol_number:0x%x: von Handle=%d", result, dir_handle+1));
return(result); return(result);
} }
@ -1495,7 +1574,7 @@ int nw_get_volume_number(uint8 *volname, int namelen)
break; break;
} }
} }
XDPRINTF((2,"GET_VOLUME_NUMBER of:%s: result = 0x%x\n", vname, result)); XDPRINTF((5,0,"GET_VOLUME_NUMBER of:%s: result = 0x%x", vname, result));
return(result); return(result);
} }
@ -1507,7 +1586,7 @@ int nw_get_volume_name(int volnr, uint8 *volname)
strcpy(volname, vols[volnr].sysname); strcpy(volname, vols[volnr].sysname);
result = strlen(volname); result = strlen(volname);
} else volname[0] = '\0'; } else volname[0] = '\0';
XDPRINTF((2,"GET_VOLUME_NAME von:%d = %s: ,result=0x%x\n", volnr, volname, result)); XDPRINTF((5,0,"GET_VOLUME_NAME von:%d = %s: ,result=0x%x", volnr, volname, result));
return(result); return(result);
} }
@ -1563,7 +1642,7 @@ static int s_nw_scan_dir_info(int dir_handle,
if (!dirsequenz) dirsequenz++; if (!dirsequenz) dirsequenz++;
strcpy(dirname, wild); strcpy(dirname, wild);
XDPRINTF((2,"SCAN_DIR: rights = 0x%x, subnr = %d\n", XDPRINTF((5,0,"SCAN_DIR: rights = 0x%x, subnr = %d",
(int)rights, (int)GET_BE16(subnr))); (int)rights, (int)GET_BE16(subnr)));
if (*dirname) { if (*dirname) {
@ -1573,7 +1652,7 @@ static int s_nw_scan_dir_info(int dir_handle,
0x10, 0x10,
&stbuff) ) { &stbuff) ) {
XDPRINTF((2,"SCAN_DIR: von %s, found %s:\n", dh->unixname, dirname)); XDPRINTF((5,0,"SCAN_DIR: von %s, found %s:", dh->unixname, dirname));
if (++aktsequenz == dirsequenz) { /* actual found */ if (++aktsequenz == dirsequenz) { /* actual found */
U16_TO_BE16(aktsequenz, subnr); U16_TO_BE16(aktsequenz, subnr);
strncpy(subname, dirname, 16); strncpy(subname, dirname, 16);
@ -1736,7 +1815,7 @@ int nw_scan_a_directory(uint8 *rdata,
{ {
NW_PATH nwpath; NW_PATH nwpath;
int completition = get_kpl_path(&nwpath, dirhandle, data, len, 0); int completition = get_kpl_path(&nwpath, dirhandle, data, len, 0);
XDPRINTF((2,"nw_scan_a_directory path:%s:, fn:%s:, completition:0x%x\n", XDPRINTF((5,0,"nw_scan_a_directory path:%s:, fn:%s:, completition:0x%x",
nwpath.path, nwpath.fn, completition)); nwpath.path, nwpath.fn, completition));
if (completition > -1) { if (completition > -1) {
struct stat stbuff; struct stat stbuff;
@ -1768,7 +1847,7 @@ int nw_scan_a_root_dir(uint8 *rdata,
NW_PATH nwpath; NW_PATH nwpath;
uint8 data[2]; uint8 data[2];
int completition = get_kpl_path(&nwpath, dirhandle, data, 0, 1); int completition = get_kpl_path(&nwpath, dirhandle, data, 0, 1);
XDPRINTF((2,"nw_scan_a_directory_2 path:%s:, fn:%s:, completition:0x%x\n", XDPRINTF((5,0,"nw_scan_a_directory_2 path:%s:, fn:%s:, completition:0x%x",
nwpath.path, nwpath.fn, completition)); nwpath.path, nwpath.fn, completition));
if (completition > -1) { if (completition > -1) {
struct stat stbuff; struct stat stbuff;
@ -1874,7 +1953,7 @@ static int create_queue_file(char *job_file_name,
(int) *job_file_name, (int) *job_file_name,
&fnfo, 0x6, 0x6, 1); &fnfo, 0x6, 0x6, 1);
XDPRINTF((2,"creat queue file bez=`%s` handle=%d\n", XDPRINTF((5,0,"creat queue file bez=`%s` handle=%d",
job_bez, result)); job_bez, result));
return(result); return(result);
} }
@ -1887,7 +1966,7 @@ int nw_creat_queue(int connection, uint8 *queue_id, uint8 *queue_job,
INT_QUEUE_JOB *jo = give_new_queue_job(old_call); INT_QUEUE_JOB *jo = give_new_queue_job(old_call);
uint32 q_id = GET_BE32(queue_id); uint32 q_id = GET_BE32(queue_id);
int result = -0xff; int result = -0xff;
XDPRINTF((2,"NW_CREAT_Q:dlen=%d, dirname=%s\n", dir_nam_len, dirname)); XDPRINTF((5,0,"NW_CREAT_Q:dlen=%d, dirname=%s", dir_nam_len, dirname));
if (NULL != jo) { if (NULL != jo) {
int jo_id = 0; int jo_id = 0;
@ -1968,11 +2047,11 @@ int nw_close_file_queue(uint8 *queue_id,
{ {
int result = -0xff; int result = -0xff;
int jo_id = (int) *job_id; /* ever only the first byte */ int jo_id = (int) *job_id; /* ever only the first byte */
XDPRINTF((2,"nw_close_file_queue JOB=%d\n", jo_id)); XDPRINTF((5,0,"nw_close_file_queue JOB=%d", jo_id));
if (jo_id > 0 && jo_id <= anz_jobs){ if (jo_id > 0 && jo_id <= anz_jobs){
INT_QUEUE_JOB *jo=queue_jobs[jo_id-1]; INT_QUEUE_JOB *jo=queue_jobs[jo_id-1];
int fhandle = (int)jo->fhandle; int fhandle = (int)jo->fhandle;
XDPRINTF((2,"nw_close_file_queue fhandle=%d\n", fhandle)); XDPRINTF((5,0,"nw_close_file_queue fhandle=%d", fhandle));
if (fhandle > 0 && fhandle <= anz_fhandles) { if (fhandle > 0 && fhandle <= anz_fhandles) {
FILE_HANDLE *fh=&(file_handles[fhandle-1]); FILE_HANDLE *fh=&(file_handles[fhandle-1]);
char unixname[300]; char unixname[300];
@ -1994,16 +2073,16 @@ int nw_close_file_queue(uint8 *queue_id,
} }
pclose(fout); pclose(fout);
} else } else
XDPRINTF((1,"Cannot open pipe `%s`\n", "lpr")); XDPRINTF((1,0,"Cannot open pipe `%s`", "lpr"));
fclose(f); fclose(f);
if (is_ok) { if (is_ok) {
unlink(unixname); unlink(unixname);
result=0; result=0;
} }
} else XDPRINTF((1,"Cannot open queue-file `%s`\n", unixname)); } else XDPRINTF((1,0,"Cannot open queue-file `%s`", unixname));
} else } else
XDPRINTF((2,"nw_close_file_queue fhandle=%d\n", fhandle)); XDPRINTF((2,0,"nw_close_file_queue fhandle=%d", fhandle));
free_queue_job(jo_id); free_queue_job(jo_id);
} }
return(result); return(result);

View File

@ -1,4 +1,4 @@
/* emutli.c 18-Dec-95 */ /* emutli.c 24-Dec-95 */
/* /*
* One short try to emulate TLI with SOCKETS. * One short try to emulate TLI with SOCKETS.
*/ */
@ -104,14 +104,43 @@ static void del_special_net(int special, char *devname, int frame)
struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)&id.ifr_addr; struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)&id.ifr_addr;
memset(&id, 0, sizeof(struct ifreq)); memset(&id, 0, sizeof(struct ifreq));
if (special != IPX_INTERNAL) {
if (devname && *devname) strcpy(id.ifr_name, devname);
sipx->sipx_type = frame;
}
sipx->sipx_network = 0L; sipx->sipx_network = 0L;
sipx->sipx_special = special; sipx->sipx_special = special;
sipx->sipx_family = AF_IPX; sipx->sipx_family = AF_IPX;
if (special == IPX_PRIMARY) {
FILE *f=fopen("/proc/net/ipx_interface", "r");
if (f) {
char buff[200];
char buff1[200];
char buff2[200];
char buff3[200];
char buff4[200];
char buff5[200];
while (fgets((char*)buff, sizeof(buff), f) != NULL){
if (sscanf(buff, "%s %s %s %s %s",
buff1, buff2, buff3, buff4, buff5) == 5) {
int len = strlen(buff5);
if (!len) continue;
switch (*(buff5+len-1)) {
case '2' : sipx->sipx_type = IPX_FRAME_8022; break;
case '3' : sipx->sipx_type = IPX_FRAME_8023; break;
case 'P' : sipx->sipx_type = IPX_FRAME_SNAP; break;
case 'I' : sipx->sipx_type = IPX_FRAME_ETHERII; break;
default : continue;
}
upstr(buff3);
if (!strcmp(buff3, "YES")) { /* primary */
strcpy(id.ifr_name, buff4);
break;
}
}
}
fclose(f);
}
} else if (special != IPX_INTERNAL) {
if (devname && *devname) strcpy(id.ifr_name, devname);
sipx->sipx_type = frame;
}
sipx->sipx_action = IPX_DLTITF; sipx->sipx_action = IPX_DLTITF;
x_ioctl(sock, SIOCSIFADDR, &id); x_ioctl(sock, SIOCSIFADDR, &id);
close(sock); close(sock);
@ -122,6 +151,8 @@ static void del_special_net(int special, char *devname, int frame)
del_special_net(IPX_INTERNAL, NULL, 0) del_special_net(IPX_INTERNAL, NULL, 0)
#define del_interface(devname, frame) \ #define del_interface(devname, frame) \
del_special_net(IPX_SPECIAL_NONE, (devname), (frame)) del_special_net(IPX_SPECIAL_NONE, (devname), (frame))
#define del_primary_net() \
del_special_net(IPX_PRIMARY, NULL, 0)
static void add_special_net(int special, static void add_special_net(int special,
char *devname, int frame, uint32 netnum, uint32 node) char *devname, int frame, uint32 netnum, uint32 node)
@ -194,6 +225,7 @@ int init_dev(char *devname, int frame, uint32 network)
del_interface(devname, frame); del_interface(devname, frame);
if (!have_ipx_started) { if (!have_ipx_started) {
have_ipx_started++; have_ipx_started++;
del_primary_net();
add_primary_net(devname, frame, network); add_primary_net(devname, frame, network);
} else } else
add_device_net(devname, frame, network); add_device_net(devname, frame, network);
@ -333,7 +365,7 @@ int t_bind(int sock, struct t_bind *a_in, struct t_bind *a_out)
return(-1); return(-1);
} }
sock2ipxadr((ipxAddr_t*) (a_out->addr.buf), &ipxs); sock2ipxadr((ipxAddr_t*) (a_out->addr.buf), &ipxs);
XDPRINTF((2,"T_BIND ADR=%s\n", visable_ipx_adr((ipxAddr_t *) a_out->addr.buf ) )); XDPRINTF((2,0,"T_BIND ADR=%s", visable_ipx_adr((ipxAddr_t *) a_out->addr.buf ) ));
} }
return(0); return(0);
} }

View File

@ -8,4 +8,5 @@
#define MAX_NW_VOLS 10 /* max. Volumes */ #define MAX_NW_VOLS 10 /* max. Volumes */
#define MAX_NET_DEVICES 1 /* max. Netdevices, frames */ #define MAX_NET_DEVICES 1 /* max. Netdevices, frames */
#define IPX_DATA_GR_546 1 /* allow ipx packets > 546+30 Byte */

View File

@ -1,4 +1,4 @@
# makefile.unx 20-Dec-95 # makefile.unx 25-Dec-95
VPATH=.. VPATH=..
O=.o O=.o
C=.c C=.c
@ -6,10 +6,17 @@ C=.c
DEBUG=-DDB DEBUG=-DDB
V_H=0 V_H=0
V_L=96 V_L=96
P_L=0 P_L=2
#define D_P_L 1
DISTRIB=mars_nwe DISTRIB=mars_nwe
#if D_P_L
DISTRIBF=$(DISTRIB)-$(V_H).$(V_L).pl$(P_L)
PATCHF=$(DISTRIBF)
#else
P_L=0
DISTRIBF=$(DISTRIB)-$(V_H).$(V_L) DISTRIBF=$(DISTRIB)-$(V_H).$(V_L)
PATCHF=$(DISTRIBF).pl$(P_L) PATCHF=$(DISTRIBF).pl$(P_L)
#endif
STERN=* STERN=*
#if 0 #if 0
@ -108,7 +115,8 @@ $(PROG5): $(PROG5)$(O) $(OBJ5)
$(OBJS): net.h config.h $(OBJS): net.h config.h
$(C)$(O): $(C)$(O):
$(CC) -c $(CFLAGS) $(HOSTCFLAGS) $(DEBUG) -D_VERSION_H_=$(V_H) -D_VERSION_L_=$(V_L) $< $(CC) -c $(CFLAGS) $(HOSTCFLAGS) $(DEBUG)\
-D_VERS_H_=$(V_H) -D_VERS_L_=$(V_L) -D_VERS_P_=$(P_L) $<
n_all: $(PROGS) n_all: $(PROGS)
@ -148,7 +156,7 @@ n_clean: n_clean1
n_distclean: n_clean n_distclean: n_clean
cd .. && (rm -f *.dir *.pag; cd obj) cd .. && (rm -f *.dir *.pag; cd obj)
n_diff: n_clean1 n_make_dir: n_clean1
cd .. && (rm -rf obj/../$(DISTRIB) \ cd .. && (rm -rf obj/../$(DISTRIB) \
; mkdir $(DISTRIB) \ ; mkdir $(DISTRIB) \
; mkdir $(DISTRIB)/examples \ ; mkdir $(DISTRIB)/examples \
@ -168,7 +176,11 @@ n_diff: n_clean1
; ln -f \ ; ln -f \
examples/$(STERN) \ examples/$(STERN) \
$(DISTRIB)/examples/. \ $(DISTRIB)/examples/. \
; makepatch $(DISTRIB).org $(DISTRIB) > $(PATCHF) \ ; cd obj )
n_diff: n_make_dir
cd .. && ( \
makepatch $(DISTRIB).org $(DISTRIB) > $(PATCHF) \
; gzip -9 -f $(PATCHF) \ ; gzip -9 -f $(PATCHF) \
; cd obj ) ; cd obj )

View File

@ -2,15 +2,15 @@ Begin3
Title: mars_nwe Title: mars_nwe
Version: 0.96 Version: 0.96
Entered-date: 20-Dec-95 Entered-date: 20-Dec-95
Description: simple novell-server-emulator (src),beta Description: full novell-server-emulator (src),beta
needs no kernelchanges, usefull for testing ipx
file-services, bindery-services, printing-services file-services, bindery-services, printing-services
Keywords: novell, netware, unixware, server, ipx, ncp, tli needs no kernelchanges, usefull for testing ipx
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
80kB mars_nwe-0.96.tgz 90kB mars_nwe-0.96.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 testet, others should work) Platforms: Linux (1.2.xx, 1.3.32 tested, others should work)
Copying-policy: GNU Copying-policy: GNU
End End

View File

@ -19,6 +19,13 @@
#include "net.h" #include "net.h"
typedef struct {
int x;
} DIR_BASE_ENTRY;
#define MAX_DIR_BASE 20
int nw_generate_dir_path(uint8 *nwpathstruct, int nw_generate_dir_path(uint8 *nwpathstruct,
uint8 *ns_dir_base, uint8 *dos_dir_base) uint8 *ns_dir_base, uint8 *dos_dir_base)
/* returns Volume Number >=0 or errcode < 0 if error */ /* returns Volume Number >=0 or errcode < 0 if error */

View File

@ -1,4 +1,4 @@
/* ncpserv.c, 19-Dec-95 */ /* ncpserv.c, 24-Dec-95 */
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany /* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
* *
@ -250,7 +250,7 @@ int find_get_conn_nr(ipxAddr_t *addr)
c->pid = pid; c->pid = pid;
c->fd = fds[1]; c->fd = fds[1];
close(fds[0]); /* no need to read */ close(fds[0]); /* no need to read */
XDPRINTF((5, "AFTER FORK new PROCESS =%d, connection=%d\n", pid, connection)); XDPRINTF((5,0, "AFTER FORK new PROCESS =%d, connection=%d", pid, connection));
} }
} }
} }
@ -304,16 +304,16 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
if (nw_debug > 1){ if (nw_debug > 1){
int j = gelen - sizeof(NCPREQUEST); int j = gelen - sizeof(NCPREQUEST);
if (nw_debug){ if (nw_debug){
DPRINTF(("NCP 0x%x REQUEST:ufunc:0x%x\n", func, ufunc)); XDPRINTF((1, 0, "NCP 0x%x REQUEST:ufunc:0x%x", func, ufunc));
if (j > 0){ if (j > 0){
uint8 *p=requestdata; uint8 *p=requestdata;
DPRINTF(("len %d, DATA:", j)); XDPRINTF((1, 2, "len %d, DATA:", j));
while (j--) { while (j--) {
int c = *p++; int c = *p++;
if (c > 32 && c < 127) DPRINTF((",\'%c\'", (char) c)); if (c > 32 && c < 127) XDPRINTF((1, 3, ",\'%c\'", (char) c));
else DPRINTF((",0x%x", c)); else XDPRINTF((1, 3, ",0x%x", c));
} }
DPRINTF(("\n")); XDPRINTF((1, 1, NULL));
} }
} }
} }
@ -358,7 +358,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
case 0x03: { /* Enable Broadcasts */ case 0x03: { /* Enable Broadcasts */
;;; ;;;
DPRINTF(("TODO: enable Broadcasts\n")); XDPRINTF((2, 0, "TODO: enable Broadcasts"));
} }
break; break;
@ -414,6 +414,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
int k, i; int k, i;
memset(xdata, 0, sizeof(struct XDATA)); memset(xdata, 0, sizeof(struct XDATA));
strcpy(xdata->servername, my_nwname); strcpy(xdata->servername, my_nwname);
if (!tells_server_version) { if (!tells_server_version) {
xdata->version = 2; xdata->version = 2;
xdata->subversion = 15; xdata->subversion = 15;
@ -421,6 +422,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
xdata->version = 3; xdata->version = 3;
xdata->subversion = 11; xdata->subversion = 11;
} }
i=0; i=0;
for (k=0; k < anz_connect; k++) { for (k=0; k < anz_connect; k++) {
if (connections[k].fd > -1) i++; if (connections[k].fd > -1) i++;
@ -466,7 +468,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
upstr(obj.name); upstr(obj.name);
strmaxcpy(password, (char*)(p1+1), strmaxcpy(password, (char*)(p1+1),
max(sizeof(password)-1, (int) *p1)); max(sizeof(password)-1, (int) *p1));
DPRINTF(("TODO:LOGIN unencrypted PW NAME='%s', PASSW='%s'\n", 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 !!!!!!! */ /* TODO: check password !!!!!!! */
@ -532,7 +534,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
obj.type = GET_BE16(p); obj.type = GET_BE16(p);
strmaxcpy((char*)obj.name, (char*)(p+3), *(p+2)); strmaxcpy((char*)obj.name, (char*)(p+3), *(p+2));
upstr(obj.name); upstr(obj.name);
XDPRINTF((2, "LOGIN CRYPTED PW NAME='%s'\n",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)))
result=nw_test_passwd(obj.id, c->crypt_key, rdata); result=nw_test_passwd(obj.id, c->crypt_key, rdata);
if (result > -1) { if (result > -1) {
@ -824,7 +826,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
;; ;;
} }
if (result < 0) completition = (uint8) -result; if (result < 0) completition = (uint8) -result;
DPRINTF(("TODO: Change Obj PW from OBJECT='%s', result=%d\n", XDPRINTF((1, 0, "TODO: Change Obj PW from OBJECT='%s', result=%d",
obj.name, result)); obj.name, result));
completition=0xff; completition=0xff;
} break; } break;
@ -910,7 +912,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
if (!result) { if (!result) {
*xdata = obj.security; *xdata = obj.security;
U32_TO_BE32(obj.id, (xdata+1)); U32_TO_BE32(obj.id, (xdata+1));
XDPRINTF((2, "ACCESS LEVEL:=0x%x, obj=0x%lx\n", XDPRINTF((2,0, "ACCESS LEVEL:=0x%x, obj=0x%lx",
(int) obj.security, obj.id)); (int) obj.security, obj.id));
data_len = 5; data_len = 5;
} else completition = (uint8)-result; } else completition = (uint8)-result;
@ -964,7 +966,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
if (0 == (result = find_obj_id(&obj, 0))) if (0 == (result = find_obj_id(&obj, 0)))
result=nw_test_passwd(obj.id, c->crypt_key, rdata); result=nw_test_passwd(obj.id, c->crypt_key, rdata);
if (result < 0) completition = (uint8) -result; if (result < 0) completition = (uint8) -result;
XDPRINTF((2, "Keyed Verify PW from OBJECT='%s', result=%d\n", XDPRINTF((2,0, "Keyed Verify PW from OBJECT='%s', result=%d",
obj.name, result)); obj.name, result));
} }
break; break;
@ -987,26 +989,26 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
result=nw_set_enpasswd(obj.id, p+1); result=nw_set_enpasswd(obj.id, p+1);
if (result< 0) completition = (uint8) -result; if (result< 0) completition = (uint8) -result;
DPRINTF(("Keyed Change PW from OBJECT='%s', result=0x%x\n", XDPRINTF((1, 0, "Keyed Change PW from OBJECT='%s', result=0x%x",
obj.name, result)); obj.name, result));
} }
break; break;
#endif #endif
case 0x4c : { /* List Relations of an Object */ case 0x4c : { /* List Relations of an Object */
DPRINTF(("TODO:List Relations of an Object\n")); XDPRINTF((1, 0, "TODO:List Relations of an Object"));
completition=0xfb; completition=0xfb;
} break; } break;
case 0x64 : { /* Create Queue */ case 0x64 : { /* Create Queue */
DPRINTF(("TODO:Create QUEUE ??\n")); XDPRINTF((1, 0, "TODO:Create QUEUE ??"));
} break; } break;
case 0x66 : { /* Read Queue Current Status */ case 0x66 : { /* Read Queue Current Status */
/* !!!!!! TO DO */ /* !!!!!! TO DO */
NETOBJ obj; NETOBJ obj;
obj.id = GET_BE32(rdata); obj.id = GET_BE32(rdata);
DPRINTF(("TODO:READ QUEUE STATUS von Q=0x%lx\n", obj.id)); XDPRINTF((1, 0, "TODO:READ QUEUE STATUS von Q=0x%lx", obj.id));
completition=0xd5; /* no Queue Job */ completition=0xd5; /* no Queue Job */
}break; }break;
@ -1014,7 +1016,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);
DPRINTF(("TODO:GET QUEUE JOB LIST von Q=0x%lx\n", obj.id)); XDPRINTF((1, 0, "TODO:GET QUEUE JOB LIST von Q=0x%lx", obj.id));
completition=0xd5; /* no Queue Job */ completition=0xd5; /* no Queue Job */
}break; }break;
@ -1022,7 +1024,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
/* !!!!!! TODO */ /* !!!!!! TODO */
NETOBJ obj; NETOBJ obj;
obj.id = GET_BE32(rdata); obj.id = GET_BE32(rdata);
DPRINTF(("TODO: GET QUEUE JOB ENTRY von Q=0x%lx\n", obj.id)); XDPRINTF((1, 0, "TODO: GET QUEUE JOB ENTRY von Q=0x%lx", obj.id));
completition=0xd5; /* no Queue Job */ completition=0xd5; /* no Queue Job */
}break; }break;
@ -1054,21 +1056,21 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
break; break;
case 0xc8 : { /* CHECK CONSOLE PRIVILEGES */ case 0xc8 : { /* CHECK CONSOLE PRIVILEGES */
DPRINTF(("TODO: CHECK CONSOLE PRIV \n")); XDPRINTF((1, 0, "TODO: CHECK CONSOLE PRIV"));
/* !!!!!! TODO completition=0xc6 (no rights) */ /* !!!!!! TODO completition=0xc6 (no rights) */
} break; } break;
case 0xc9 : { /* GET FILE SERVER DESCRIPTION STRINGs */ case 0xc9 : { /* GET FILE SERVER DESCRIPTION STRINGs */
char *company = "Mars :-)"; char *company = "Mars :-)";
char *revision = "Version %d.%d"; char *revision = "Version %d.%d";
char *revision_date= "20-Dec-95"; char *revision_date= "24-Dec-95";
char *copyright = "(C)opyright Martin Stover"; char *copyright = "(C)opyright Martin Stover";
int k=strlen(company)+1; int k=strlen(company)+1;
memset(responsedata, 0, 512); memset(responsedata, 0, 512);
strcpy(responsedata, company); strcpy(responsedata, company);
k += (1+sprintf(responsedata+k, revision, k += (1+sprintf(responsedata+k, revision,
_VERSION_H_, _VERSION_L_ )); _VERS_H_, _VERS_L_ ));
strcpy(responsedata+k, revision_date); strcpy(responsedata+k, revision_date);
k += (strlen(revision_date)+1); k += (strlen(revision_date)+1);
strcpy(responsedata+k, copyright); strcpy(responsedata+k, copyright);
@ -1139,7 +1141,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
ncpresponse->connect_status = connect_status; ncpresponse->connect_status = connect_status;
data_len=write(c->fd, (char*)ncpresponse, data_len=write(c->fd, (char*)ncpresponse,
sizeof(NCPRESPONSE) + data_len); sizeof(NCPRESPONSE) + data_len);
XDPRINTF((2, "0x%x 0x%x compl:0x%x, write to %d, anz = %d\n", XDPRINTF((2, 0, "0x%x 0x%x compl:0x%x, write to %d, anz = %d",
func, (int)ufunc, (int) completition, c->fd, data_len)); func, (int)ufunc, (int) completition, c->fd, data_len));
return(0); /* ok */ return(0); /* ok */
} }
@ -1194,7 +1196,7 @@ static void close_all(void)
if (ncp_fd > -1) { if (ncp_fd > -1) {
t_unbind(ncp_fd); t_unbind(ncp_fd);
t_close(ncp_fd); t_close(ncp_fd);
XDPRINTF((2, "LEAVE ncpserv\n")); XDPRINTF((2,0, "LEAVE ncpserv"));
ncp_fd = -1; ncp_fd = -1;
} }
} }
@ -1256,7 +1258,7 @@ static int handle_ctrl(void)
int result = 0; int result = 0;
int data_len = read(0, (char*)&what, sizeof(what)); int data_len = read(0, (char*)&what, sizeof(what));
if (data_len == sizeof(what)) { if (data_len == sizeof(what)) {
XDPRINTF((2, "NCPSERV:GOT CTRL what=0x%x\n", what)); XDPRINTF((2, 0, "GOT CTRL what=0x%x", what));
switch (what) { switch (what) {
case 0x5555 : /* clear_connection */ case 0x5555 : /* clear_connection */
data_len = read(0, (char*)&conn, sizeof(conn)); data_len = read(0, (char*)&conn, sizeof(conn));
@ -1266,11 +1268,11 @@ static int handle_ctrl(void)
case 0x3333 : /* 'bindery' calls */ case 0x3333 : /* 'bindery' calls */
if (sizeof(conn) == read(0, (char*)&conn, sizeof(conn))) { if (sizeof(conn) == read(0, (char*)&conn, sizeof(conn))) {
uint8 *buff = xmalloc(conn+10); uint8 *buff = xmalloc(conn+10);
XDPRINTF((2, "0x3333 len=%d\n", conn)); XDPRINTF((2,0, "0x3333 len=%d", conn));
if (conn == read(0, (char*)buff, conn)) if (conn == read(0, (char*)buff, conn))
handle_bind_calls(buff); handle_bind_calls(buff);
else else
DPRINTF(("0x3333 protokoll error:len=%d\n", conn)); XDPRINTF((1, 1, "0x3333 protokoll error:len=%d", conn));
xfree(buff); xfree(buff);
} }
break; break;
@ -1289,7 +1291,7 @@ static int handle_ctrl(void)
default : break; default : break;
} /* switch */ } /* switch */
result++; result++;
} else XDPRINTF((2, "NCPSERV:GOT CTRL size=%d\n", data_len)); } else XDPRINTF((2, 0, "GOT CTRL size=%d", data_len));
return(result); return(result);
} }
@ -1337,16 +1339,16 @@ int main(int argc, char *argv[])
if (p->revents){ if (p->revents){
if (!j) { /* ncp-socket */ if (!j) { /* ncp-socket */
XDPRINTF((99,"POLL %d\n", p->revents)); XDPRINTF((99,0, "POLL revents=%d", p->revents));
if (p->revents & ~POLLIN) if (p->revents & ~POLLIN)
errorp(0, "STREAM error", "revents=0x%x", p->revents ); errorp(0, "STREAM error", "revents=0x%x", p->revents );
else { else {
if ((result = t_rcvudata(ncp_fd, &ud, &rcv_flags)) > -1){ if ((result = t_rcvudata(ncp_fd, &ud, &rcv_flags)) > -1){
in_len = ud.udata.len; in_len = ud.udata.len;
XDPRINTF((10, "NCPSERV-LOOP von %s\n", visable_ipx_adr(&from_addr))); XDPRINTF((10, 0, "NCPSERV-LOOP von %s", visable_ipx_adr(&from_addr)));
if ((type = GET_BE16(ncprequest->type)) == 0x2222 || type == 0x5555) { if ((type = GET_BE16(ncprequest->type)) == 0x2222 || type == 0x5555) {
int connection = (int)ncprequest->connection; int connection = (int)ncprequest->connection;
XDPRINTF((10, "GOT 0x%x in NCPSERV connection=%d\n", type, connection)); XDPRINTF((10,0, "GOT 0x%x in NCPSERV connection=%d", type, connection));
if ( connection > 0 && connection <= anz_connect) { if ( connection > 0 && connection <= anz_connect) {
CONNECTION *c = &(connections[connection-1]); CONNECTION *c = &(connections[connection-1]);
if (!memcmp(&from_addr, &(c->client_adr), sizeof(ipxAddr_t))) { if (!memcmp(&from_addr, &(c->client_adr), sizeof(ipxAddr_t))) {
@ -1365,7 +1367,7 @@ int main(int argc, char *argv[])
/* perhaps nwconn is busy */ /* perhaps nwconn is busy */
ncp_response(0x9999, ncprequest->sequence, ncp_response(0x9999, ncprequest->sequence,
connection, 0, 0x0, 0, 0); connection, 0, 0x0, 0, 0);
XDPRINTF((2, "Send Request being serviced to connection:%d\n", connection)); XDPRINTF((2, 0, "Send Request being serviced to connection:%d", connection));
continue; continue;
} }
@ -1379,7 +1381,7 @@ int main(int argc, char *argv[])
if (sent_here) { if (sent_here) {
int anz=write(c->fd, (char*)ncprequest, in_len); int anz=write(c->fd, (char*)ncprequest, in_len);
XDPRINTF((10, "write to %d, anz = %d\n", 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 LOGGED */
} }
@ -1398,19 +1400,21 @@ int main(int argc, char *argv[])
} }
} }
} }
XDPRINTF((10, "c->fd = %d\n", c->fd)); XDPRINTF((10,0, "c->fd = %d", c->fd));
} }
} }
/* here someting is wrong */ /* here someting is wrong */
XDPRINTF((1, "GOT 0x%x connection=%d of %d conns not OK in NCPSERV\n", XDPRINTF((1,0, "GOT 0x%x connection=%d of %d conns not OK",
type, ncprequest->connection, anz_connect)); type, ncprequest->connection, anz_connect));
ncp_response(0x3333, ncprequest->sequence, ncp_response(0x3333, ncprequest->sequence,
ncprequest->connection, ncprequest->connection,
0, 0xf9, 0, 0); 0, 0xff, 0x08, 0);
} else if (type == 0x1111) { } else if (type == 0x1111) {
/* GIVE CONNECTION Nr connection */ /* GIVE CONNECTION Nr connection */
int connection = (server_goes_down) ? 0 : find_get_conn_nr(&from_addr); int connection = (server_goes_down) ? 0 : find_get_conn_nr(&from_addr);
XDPRINTF((2, "GIVE CONNECTION NR=%d in NCPSERV\n", connection)); XDPRINTF((2, 0, "GIVE CONNECTION NR=%d", connection));
if (connection) { if (connection) {
CONNECTION *c = &(connections[connection-1]); CONNECTION *c = &(connections[connection-1]);
int anz; int anz;
@ -1418,20 +1422,20 @@ int main(int argc, char *argv[])
c->object_id = 0; /* firsttime set 0 for NOT LOGGED */ c->object_id = 0; /* firsttime set 0 for NOT LOGGED */
c->sequence = 0; c->sequence = 0;
anz=write(c->fd, (char*)ncprequest, in_len); anz=write(c->fd, (char*)ncprequest, in_len);
XDPRINTF((10, "write to oldconn %d, anz = %d\n", c->fd, anz)); XDPRINTF((10, 0, "write to oldconn %d, anz = %d", c->fd, anz));
} else /* no free connection */ } else /* no free connection */
ncp_response(0x3333, 0, 0, 0, 0xf9, 0, 0); ncp_response(0x3333, 0, 0, 0, 0xf9, 0, 0);
} else { } else {
int connection = (int)ncprequest->connection; int connection = (int)ncprequest->connection;
int sequence = (int)ncprequest->sequence; int sequence = (int)ncprequest->sequence;
XDPRINTF((1, "NCPSERV:Got UNKNOWN TYPE: 0x%x\n", type)); XDPRINTF((1,0, "Got UNKNOWN TYPE: 0x%x", type));
ncp_response(0x3333, sequence, connection, ncp_response(0x3333, sequence, connection,
1, 0xfb, 0, 0); 1, 0xfb, 0, 0);
} }
} }
} }
} else if (p->fd==0) { /* fd_ncpserv_in */ } else if (p->fd==0) { /* fd_ncpserv_in */
XDPRINTF((2,"POLL %d, fh=%d\n", p->revents, p->fd)); XDPRINTF((2,0,"POLL %d, fh=%d", p->revents, p->fd));
if (p->revents & ~POLLIN) if (p->revents & ~POLLIN)
errorp(0, "STREAM error", "revents=0x%x", p->revents ); errorp(0, "STREAM error", "revents=0x%x", p->revents );
else handle_ctrl(); else handle_ctrl();
@ -1441,7 +1445,7 @@ int main(int argc, char *argv[])
p++; p++;
} /* while */ } /* while */
} else { } else {
XDPRINTF((3,"NCPSERV:POLLING ...\n")); XDPRINTF((3,0,"POLLING ..."));
} }
} }
close_all(); close_all();

62
net.h
View File

@ -1,4 +1,4 @@
/* net.h 20-Nov-95 */ /* net.h 02-Jan-96 */
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany /* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
* *
@ -17,7 +17,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#ifndef _M_NET_H_ #ifndef _M_NET_H_
#define _M_NET_H_ #define _M_NET_H_
#include <stdio.h> #include <stdio.h>
@ -79,7 +78,41 @@
#define MAX_U32 ((uint32)0xffffffffL) #define MAX_U32 ((uint32)0xffffffffL)
#define MAX_U16 ((uint16)0xffff) #define MAX_U16 ((uint16)0xffff)
#define IPX_MAX_DATA /* 1058 */ 546
/* ===================> config.h <======================= */
#include "config.h"
#ifndef MAX_CONNECTIONS
# define MAX_CONNECTIONS 5 /* maximum Number of Connections */
#endif
#ifndef MAX_NW_VOLS
# define MAX_NW_VOLS 10
#endif
#ifndef MAX_NET_DEVICES
# define MAX_NET_DEVICES 5
#endif
#ifndef FILENAME_NW_INI
# define FILENAME_NW_INI "./nw.ini" /* location of ini (conf) file */
#endif
#ifndef PATHNAME_BINDERY
# define PATHNAME_BINDERY "." /* location of bindery files */
#endif
#ifndef IPX_DATA_GR_546
# define IPX_DATA_GR_546 1
#endif
#if IPX_DATA_GR_546
# define IPX_MAX_DATA 1058
#else
# define IPX_MAX_DATA 546
#endif
#define MAX_SERVER_NAME 48 #define MAX_SERVER_NAME 48
typedef union { typedef union {
@ -220,29 +253,6 @@ typedef struct S_NCPREQUEST NCPREQUEST;
#define FD_NWSERV 3 /* one after stderr */ #define FD_NWSERV 3 /* one after stderr */
/* ===================> config.h <======================= */
#include "config.h"
#ifndef MAX_CONNECTIONS
# define MAX_CONNECTIONS 5 /* maximum Number of Connections */
#endif
#ifndef MAX_NW_VOLS
# define MAX_NW_VOLS 10
#endif
#ifndef MAX_NET_DEVICES
# define MAX_NET_DEVICES 5
#endif
#ifndef FILENAME_NW_INI
# define FILENAME_NW_INI "./nw.ini" /* location of ini (conf) file */
#endif
#ifndef PATHNAME_BINDERY
# define PATHNAME_BINDERY "." /* location of bindery files */
#endif
#include "net1.h" #include "net1.h"
/* connect.c */ /* connect.c */

23
net1.c
View File

@ -1,4 +1,4 @@
/* net1.c, 10-Dec-95 */ /* net1.c, 24-Dec-95 */
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany /* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
* *
@ -22,9 +22,9 @@
#if HAVE_TLI #if HAVE_TLI
void print_t_info(struct t_info *t) void print_t_info(struct t_info *t)
{ {
XDPRINTF((2,"T_INFO:addr %ld, options %ld, tsdu %ld, etsdu %ld\n", XDPRINTF((2,0, "T_INFO:addr %ld, options %ld, tsdu %ld, etsdu %ld",
t->addr, t->options,t->tsdu, t->etsdu)); t->addr, t->options,t->tsdu, t->etsdu));
XDPRINTF((2,"connect %ld, discon %ld, servtype %ld\n", XDPRINTF((2,0, "connect %ld, discon %ld, servtype %ld",
t->connect, t->discon,t->servtype)); t->connect, t->discon,t->servtype));
#if 0 #if 0
struct t_info { struct t_info {
@ -55,7 +55,7 @@ static char str[200];
void print_ipx_addr(ipxAddr_t *p) void print_ipx_addr(ipxAddr_t *p)
{ {
XDPRINTF((2,"%s\n", visable_ipx_adr(p))); XDPRINTF((2,0,"%s", visable_ipx_adr(p)));
} }
void print_ud_data(struct t_unitdata *ud) void print_ud_data(struct t_unitdata *ud)
@ -63,21 +63,20 @@ void print_ud_data(struct t_unitdata *ud)
int packet_typ = *(int*)(ud->opt.buf); int packet_typ = *(int*)(ud->opt.buf);
int data_len = ud->udata.len; int data_len = ud->udata.len;
IPX_DATA *ipxdata = (IPX_DATA *)(ud->udata.buf); IPX_DATA *ipxdata = (IPX_DATA *)(ud->udata.buf);
XDPRINTF((2,"DATA-LEN %d, PACKET-TYPE %d von:", XDPRINTF((2,0,"DATA-LEN %d, PACKET-TYPE %d von: %s",
data_len, packet_typ)); data_len, packet_typ, visable_ipx_adr((ipxAddr_t *)(ud->addr.buf))));
/* hierin steht nun Addresse u. Node des Senders */ /* hierin steht nun Addresse u. Node des Senders */
print_ipx_addr((ipxAddr_t *)(ud->addr.buf));
if (packet_typ == PACKT_CORE) { if (packet_typ == PACKT_CORE) {
XDPRINTF((2,"Query Type 0x%x, Server Type 0x%xd\n", XDPRINTF((2,0, "Query Type 0x%x, Server Type 0x%xd",
GET_BE16(ipxdata->sqp.query_type), GET_BE16(ipxdata->sqp.query_type),
GET_BE16(ipxdata->sqp.server_type))); GET_BE16(ipxdata->sqp.server_type)));
} else if (data_len > sizeof(SIP)){ } else if (data_len > sizeof(SIP)){
SAP *sap = &(ipxdata->sap); SAP *sap = &(ipxdata->sap);
SAPS *saps = &(ipxdata->sap.saps); SAPS *saps = &(ipxdata->sap.saps);
int sap_operation = GET_BE16(sap->sap_operation); int sap_operation = GET_BE16(sap->sap_operation);
XDPRINTF((2,"SAP-OPERATION %d\n", sap_operation)); XDPRINTF((2,0, "SAP-OPERATION %d", sap_operation));
while (data_len >= sizeof(SAPS)){ while (data_len >= sizeof(SAPS)){
XDPRINTF((2,"Name:%s:, typ:0x%x\n",saps->server_name, XDPRINTF((2,0, "Name:%s:, typ:0x%x",saps->server_name,
GET_BE16(saps->server_type))); GET_BE16(saps->server_type)));
print_ipx_addr(&(saps->server_adr)); print_ipx_addr(&(saps->server_adr));
saps++; saps++;
@ -93,7 +92,7 @@ void print_ipx_data(IPX_DATA *p)
void print_sip_data(SIP *sip) void print_sip_data(SIP *sip)
{ {
XDPRINTF((2,"Name:%s:,response_type:0x%x,server_typ:0x%x\n",sip->server_name, XDPRINTF((2,0,"Name:%s:,response_type:0x%x,server_typ:0x%x",sip->server_name,
GET_BE16(sip->response_type), GET_BE16(sip->server_type))); GET_BE16(sip->response_type), GET_BE16(sip->server_type)));
print_ipx_addr(&(sip->server_adr)); print_ipx_addr(&(sip->server_adr));
} }
@ -155,7 +154,7 @@ int send_ipx_data(int fd, int pack_typ,
ud.udata.len = data_len; ud.udata.len = data_len;
ud.udata.maxlen = data_len; ud.udata.maxlen = data_len;
ud.addr.buf = (char*)to_addr; ud.addr.buf = (char*)to_addr;
if (comment != NULL) XDPRINTF((2,"%s TO: ", comment)); if (comment != NULL) XDPRINTF((2,0,"%s TO: ", comment));
if (nw_debug > 1) print_ipx_addr(to_addr); if (nw_debug > 1) print_ipx_addr(to_addr);
if (t_sndudata(fd, &ud) < 0){ if (t_sndudata(fd, &ud) < 0){
if (nw_debug > 1) t_error("t_sndudata !OK"); if (nw_debug > 1) t_error("t_sndudata !OK");

View File

@ -1,4 +1,4 @@
/* nwclient.c: 12-Nov-95 */ /* nwclient.c: 24-Dec-95 */
/* /*
* 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
@ -49,7 +49,7 @@ static int open_socket()
t_close(ipx_fd); t_close(ipx_fd);
return(-1); return(-1);
} }
XDPRINTF((0,"socket bound TO %s\n", visable_ipx_adr(&my_addr) )); XDPRINTF((1,0, "socket bound TO %s", visable_ipx_adr(&my_addr) ));
return(ipx_fd); return(ipx_fd);
} }
@ -78,17 +78,17 @@ static void ncp_request(int type, int sequence,
ncprequest->function = (uint8) function; ncprequest->function = (uint8) function;
{ {
int j = data_len; int j = data_len;
DPRINTF(("NCP REQUEST: type:0x%x, seq:%d, conn:%d, task:%d, reserved:0x%x, func:0x%x\n", XDPRINTF((1, 0, "NCP REQUEST: type:0x%x, seq:%d, conn:%d, task:%d, reserved:0x%x, func:0x%x",
type, sequence, connection, task, reserved, function)); type, sequence, connection, task, reserved, function));
if (j > 0){ if (j > 0){
uint8 *p=requestdata; uint8 *p=requestdata;
DPRINTF(("len %d, DATA:", j)); XDPRINTF((1, 2, "len %d, DATA:", j));
while (j--) { while (j--) {
int c = *p++; int c = *p++;
if (c > 32 && c < 127) DPRINTF((",\'%c\'", (char) c)); if (c > 32 && c < 127) XDPRINTF((1, 3,",\'%c\'", (char) c));
else DPRINTF((",0x%x", c)); else XDPRINTF((1, 3, ",0x%x", c));
} }
DPRINTF(("\n")); XDPRINTF((1, 1, NULL));
} }
} }
send_ipx_data(fd_ipx, 17, sizeof(NCPREQUEST) + data_len, send_ipx_data(fd_ipx, 17, sizeof(NCPREQUEST) + data_len,
@ -137,8 +137,8 @@ static int handle_event(void)
uderr.opt.buf = (char*)&err_pack_typ; /* bekommt aktuellen Typ */ uderr.opt.buf = (char*)&err_pack_typ; /* bekommt aktuellen Typ */
ud.addr.buf = (char*)&source_adr; ud.addr.buf = (char*)&source_adr;
t_rcvuderr(fd_ipx, &uderr); t_rcvuderr(fd_ipx, &uderr);
DPRINTF(("Error from %s, Code = 0x%lx\n", visable_ipx_adr(&erradr), uderr.error)); XDPRINTF((1, 0, "Error from %s, Code = 0x%lx", visable_ipx_adr(&erradr), uderr.error));
t_error("t_rcvudata !OK"); if (nw_debug) t_error("t_rcvudata !OK");
return(-1); return(-1);
} else { } else {
int responselen = ud.udata.len - sizeof(NCPRESPONSE); int responselen = ud.udata.len - sizeof(NCPRESPONSE);
@ -152,19 +152,19 @@ static int handle_event(void)
int connect_status = (int)ncpresponse->connect_status; int connect_status = (int)ncpresponse->connect_status;
int type = GET_BE16(ncpresponse->type); int type = GET_BE16(ncpresponse->type);
DPRINTF(("Ptyp:%d von: %s, len=%d\n", (int)ipx_pack_typ, visable_ipx_adr(&source_adr), responselen)); XDPRINTF((1,0, "Ptyp:%d von: %s, len=%d", (int)ipx_pack_typ, visable_ipx_adr(&source_adr), responselen));
DPRINTF(("RESPONSE:t:0x%x, seq:%d, conn:%d, task:%d, res:0x%x, complet.:0x%x, connect:0x%x\n", XDPRINTF((1,0, "RESPONSE:t:0x%x, seq:%d, conn:%d, task:%d, res:0x%x, complet.:0x%x, connect:0x%x",
type, sequence, connection, task, reserved, completition, connect_status)); type, sequence, connection, task, reserved, completition, connect_status));
if (j > 0){ if (j > 0){
uint8 *p=responsedata; uint8 *p=responsedata;
DPRINTF(("len %d, DATA:", j)); XDPRINTF((1, 2, "len %d, DATA:", j));
while (j--) { while (j--) {
int c = *p++; int c = *p++;
if (c > 32 && c < 127) DPRINTF((",\'%c\'", (char) c)); if (c > 32 && c < 127) XDPRINTF((1, 3, ",\'%c\'", (char) c));
else DPRINTF((",0x%x", c)); else XDPRINTF((1, 3, ",0x%x", c));
} }
DPRINTF(("\n")); XDPRINTF((1, 1, NULL));
} }
} }
@ -198,7 +198,7 @@ static int get_conn_nr(void)
0, "Get Connection Nr."); 0, "Get Connection Nr.");
if (!handle_event()) { if (!handle_event()) {
connection = ncpresponse->connection; connection = ncpresponse->connection;
DPRINTF(("NWCLIENT GOT CONNECTION NR:%d\n", connection)); XDPRINTF((1, 0, "NWCLIENT GOT CONNECTION NR:%d", connection));
return(0); return(0);
} }
return(-1); return(-1);
@ -209,7 +209,7 @@ static int get_pkt_size(void)
uint8 data[] = {0x4, 0}; /* wanted ?? SIZE */ uint8 data[] = {0x4, 0}; /* wanted ?? SIZE */
RDATA(data, 0x21, "Get Pktsize"); RDATA(data, 0x21, "Get Pktsize");
if (!handle_event()) { if (!handle_event()) {
DPRINTF(("NWCLIENT GOT PACKET SIZE =:%d\n", (int)GET_BE16(responsedata))); XDPRINTF((1,0, "NWCLIENT GOT PACKET SIZE =:%d", (int)GET_BE16(responsedata)));
return(0); return(0);
} }
return(-1); return(-1);
@ -220,7 +220,7 @@ static int get_server_info(void)
uint8 data[] = {0, 1, 0x11}; uint8 data[] = {0, 1, 0x11};
RDATA(data, 0x17, "Get FileServer Info"); RDATA(data, 0x17, "Get FileServer Info");
if (!handle_event()) { if (!handle_event()) {
DPRINTF(("NWCLIENT GOT SERVER INFO von=:%s\n", responsedata )); XDPRINTF((1,0, "NWCLIENT GOT SERVER INFO von=:%s", responsedata ));
return(0); return(0);
} }
return(-1); return(-1);
@ -278,7 +278,7 @@ static int file_search_init(DIR_IDS *di, int dirhandle, char *path)
VDATA(0x3e, pathlen+2, "FILE SEARCH INIT"); VDATA(0x3e, pathlen+2, "FILE SEARCH INIT");
if (!handle_event()) { if (!handle_event()) {
if (di) memcpy(di, responsedata, 3); if (di) memcpy(di, responsedata, 3);
DPRINTF(("NWCLIENT GOT FILES SEARCH INIT HANDLE=:%d\n", XDPRINTF((1,0, "NWCLIENT GOT FILES SEARCH INIT HANDLE=:%d",
(int)GET_BE16(responsedata+1) )); (int)GET_BE16(responsedata+1) ));
return( (int) *(responsedata+3) ); /* access */ return( (int) *(responsedata+3) ); /* access */
} }
@ -301,7 +301,7 @@ static int file_search_cont(DIR_IDS *di, int seq,
if (!handle_event()) { if (!handle_event()) {
int dir_id = GET_BE16(responsedata+2); int dir_id = GET_BE16(responsedata+2);
seq = GET_BE16(responsedata); seq = GET_BE16(responsedata);
DPRINTF(("GOT SEARCH CONT dir_id=%d, seq=%d\n", dir_id, seq)); XDPRINTF((1, 0, "GOT SEARCH CONT dir_id=%d, seq=%d", dir_id, seq));
return(seq); return(seq);
} }
return(-1); return(-1);
@ -472,7 +472,7 @@ static int get_bindery_object_id(int type, char *name)
memcpy(p, name, namlen); memcpy(p, name, namlen);
VDATA(0x17, namlen+6, "GET BINDERY OBJECT ID"); VDATA(0x17, namlen+6, "GET BINDERY OBJECT ID");
if (!handle_event()) { if (!handle_event()) {
DPRINTF(("GOT BIND OBJ ID=0x%lx\n", GET_BE32(responsedata))); XDPRINTF((1, 0, "GOT BIND OBJ ID=0x%lx", GET_BE32(responsedata)));
} }
return(0); return(0);
} }
@ -624,7 +624,7 @@ static void teste_reads(void)
size = read_datei(fh, offs, 0x200); size = read_datei(fh, offs, 0x200);
} }
} }
DPRINTF(("%d Bytes readed\n", gelesen)); XDPRINTF((1,0, "%d Bytes readed", gelesen));
} }
static void test_wdog(void) static void test_wdog(void)
@ -660,11 +660,11 @@ static void test_wdog(void)
uderr.opt.buf = (char*)&err_pack_typ; /* bekommt aktuellen Typ */ uderr.opt.buf = (char*)&err_pack_typ; /* bekommt aktuellen Typ */
ud.addr.buf = (char*)&source_adr; ud.addr.buf = (char*)&source_adr;
t_rcvuderr(fd_ipx, &uderr); t_rcvuderr(fd_ipx, &uderr);
DPRINTF(("Error from %s, Code = 0x%lx\n", visable_ipx_adr(&erradr), uderr.error)); XDPRINTF((1,0, "Error from %s, Code = 0x%lx", visable_ipx_adr(&erradr), uderr.error));
t_error("t_rcvudata !OK"); if (nw_debug) t_error("t_rcvudata !OK");
return; return;
} else { } else {
DPRINTF(("WDOG Packet von:%s, len=%d connid=%d, status=%d\n", XDPRINTF((1,0, "WDOG Packet von:%s, len=%d connid=%d, status=%d",
visable_ipx_adr(&source_adr), visable_ipx_adr(&source_adr),
(int)ud.udata.len, (int) ipx_data_buff.wdog.connid, (int)ud.udata.len, (int) ipx_data_buff.wdog.connid,
(int)ipx_data_buff.wdog.status)); (int)ipx_data_buff.wdog.status));
@ -688,7 +688,7 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
DPRINTF(("NWCLIENT MYADDR=%s, SERVER=%s \n", *(argv+1), *(argv+2) )); XDPRINTF((1, 0, "NWCLIENT MYADDR=%s, SERVER=%s", *(argv+1), *(argv+2) ));
adr_to_ipx_addr(&my_addr, *(argv+1)); adr_to_ipx_addr(&my_addr, *(argv+1));
adr_to_ipx_addr(&serv_addr, *(argv+2)); adr_to_ipx_addr(&serv_addr, *(argv+2));

163
nwconn.c
View File

@ -1,4 +1,4 @@
/* nwconn.c 04-Dec-95 */ /* nwconn.c 02-Jan-96 */
/* one process / connection */ /* one process / connection */
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany /* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
@ -57,11 +57,14 @@ static int open_ipx_socket()
close(ipx_fd); close(ipx_fd);
return(-1); return(-1);
} }
XDPRINTF((2, "NWCONN OpenSocket: %s\n", XDPRINTF((5, 0, "NWCONN OpenSocket: %s",
visable_ipx_adr((ipxAddr_t *) bind.addr.buf))); visable_ipx_adr((ipxAddr_t *) bind.addr.buf)));
return(0); return(0);
} }
static int req_printed=0;
static int ncp_response(int sequence, static int ncp_response(int sequence,
int completition, int data_len) int completition, int data_len)
@ -69,9 +72,11 @@ static int ncp_response(int sequence,
ncpresponse->sequence = (uint8) sequence; ncpresponse->sequence = (uint8) sequence;
ncpresponse->completition = (uint8) completition; ncpresponse->completition = (uint8) completition;
last_sequence = sequence; last_sequence = sequence;
XDPRINTF((2,"NWCONN NCP_RESP seq:%d, conn:%d, compl=0x%x TO %s\n", if (req_printed) {
XDPRINTF((0,0, "NWCONN NCP_RESP seq:%d, conn:%d, compl=0x%x TO %s",
(int)ncpresponse->sequence, (int) ncpresponse->connection, (int)completition, (int)ncpresponse->sequence, (int) ncpresponse->connection, (int)completition,
visable_ipx_adr((ipxAddr_t *) ud.addr.buf))); visable_ipx_adr((ipxAddr_t *) ud.addr.buf)));
}
ud.udata.len = ud.udata.maxlen = sizeof(NCPRESPONSE) + data_len; ud.udata.len = ud.udata.maxlen = sizeof(NCPRESPONSE) + data_len;
if (t_sndudata(ipx_fd, &ud) < 0){ if (t_sndudata(ipx_fd, &ud) < 0){
@ -81,65 +86,58 @@ static int ncp_response(int sequence,
return(0); return(0);
} }
static void pr_debug_request()
{
if (req_printed++) return;
XDPRINTF((0, 0, "NCP REQUEST:type:0x%x, seq:%d, task:%d, reserved:0x%x, func:0x%x",
ncp_type,
(int)ncprequest->sequence,
(int)ncprequest->task,
(int)ncprequest->reserved,
(int)ncprequest->function));
if (requestlen > 0){
int j = requestlen;
uint8 *p=requestdata;
XDPRINTF((0, 2, "len %d, DATA:", j));
while (j--) {
int c = *p++;
if (c > 32 && c < 127) XDPRINTF((0, 3,",\'%c\'", (char) c));
else XDPRINTF((0,3, ",0x%x", c));
}
XDPRINTF((0,1,NULL));
}
}
static int test_handle = -1; static int test_handle = -1;
static void handle_ncp_serv() static void handle_ncp_serv()
{ {
int data_len = 0;
int sequence = (int)ncprequest->sequence;
int task = (int)ncprequest->task;
int reserved = (int)ncprequest->reserved;
int function = (int)ncprequest->function; int function = (int)ncprequest->function;
int completition = 0; /* first set */ int completition = 0; /* first set */
int org_nw_debug = nw_debug; int org_nw_debug = nw_debug;
int do_druck = 0; int do_druck = 0;
int data_len = 0;
if (last_sequence == sequence && ncp_type != 0x1111){ /* send the same again */ if (last_sequence == (int)ncprequest->sequence
&& ncp_type != 0x1111){ /* send the same again */
if (t_sndudata(ipx_fd, &ud) < 0){ if (t_sndudata(ipx_fd, &ud) < 0){
if (nw_debug) t_error("t_sndudata !OK"); if (nw_debug) t_error("t_sndudata !OK");
} }
XDPRINTF((2,"Sequence %d is written twice\n", sequence)); XDPRINTF((2,0, "Sequence %d is written twice", (int)ncprequest->sequence));
return; return;
} }
req_printed=0;
#if 0 if (nw_debug > 1){
if (!nw_debug && (
/*
function == 0x43 ||
function == 0x4c ||
function == 0x4d ||
function == 0x4a ||
*/
function == 0x11
) ) nw_debug=1;
#endif
if (nw_debug){
int j = requestlen;
if (nw_debug < 10 if (nw_debug < 10
&& (function==0x48 || function == 0x49)) /* read or write */ && (function==0x48 || function == 0x49)) /* read or write */
nw_debug=0; nw_debug=1;
if (nw_debug < 15 if (nw_debug < 15
&& (function==0x48)) /* read */ && (function==0x48)) /* read */
nw_debug=0; nw_debug=1;
if (nw_debug > 1){
do_druck=2;
XDPRINTF((2,"NCP REQUEST:type:0x%x, seq:%d, task:%d, reserved:0x%x, func:0x%x\n",
ncp_type, sequence, task, reserved, function));
if (j > 0){
uint8 *p=requestdata;
XDPRINTF((2,"len %d, DATA:", j));
while (j--) {
int c = *p++;
if (c > 32 && c < 127) XDPRINTF((2,",\'%c\'", (char) c));
else XDPRINTF((2,",0x%x", c));
}
XDPRINTF((2,"\n"));
}
}
} }
if (nw_debug > 5) pr_debug_request();
if (ncp_type == 0x2222) { if (ncp_type == 0x2222) {
switch (function) { switch (function) {
case 0x12 : { /* Get Volume Info with Number */ case 0x12 : { /* Get Volume Info with Number */
@ -213,7 +211,8 @@ static void handle_ncp_serv()
(uint8)-nw_set_dir_handle((int)input->target_dir_handle, (uint8)-nw_set_dir_handle((int)input->target_dir_handle,
(int)input->source_dir_handle, (int)input->source_dir_handle,
input->path, input->path,
(int)input->pathlen, task); (int)input->pathlen,
(int)(ncprequest->task));
} else if (1 == *p){ /* liefert Verzeichnis Namen */ } else if (1 == *p){ /* liefert Verzeichnis Namen */
/* Dir_handles */ /* Dir_handles */
@ -232,7 +231,7 @@ static void handle_ncp_serv()
xdata->len = (uint8) result; xdata->len = (uint8) result;
data_len = result + 1; data_len = result + 1;
xdata->name[result] = '\0'; xdata->name[result] = '\0';
XDPRINTF((2,"GetDirektoryPATH=%s\n", xdata->name)); XDPRINTF((5,0, "GetDirektoryPATH=%s", xdata->name));
} else completition = (uint8)-result; } else completition = (uint8)-result;
} else if (2 == *p){ /* Scan Direktory Information */ } else if (2 == *p){ /* Scan Direktory Information */
/******** Scan Dir Info ****************/ /******** Scan Dir Info ****************/
@ -261,7 +260,7 @@ static void handle_ncp_serv()
if (result > -1){ if (result > -1){
xdata->max_right_mask = (uint8)result; xdata->max_right_mask = (uint8)result;
data_len = sizeof(struct XDATA); data_len = sizeof(struct XDATA);
XDPRINTF((2,"Scan Dir Info max_right_mask=%d\n", (int)result)); XDPRINTF((5,0,"Scan Dir Info max_right_mask=%d", (int)result));
} else completition = (uint8)-result; } else completition = (uint8)-result;
} else if (*p == 0x3){ /* Get Direktory Rights */ } else if (*p == 0x3){ /* Get Direktory Rights */
/******** Get Eff Dir Rights ****************/ /******** Get Eff Dir Rights ****************/
@ -275,7 +274,7 @@ static void handle_ncp_serv()
if (result > -1) { if (result > -1) {
xdata->eff_right_mask = (uint8) result; xdata->eff_right_mask = (uint8) result;
data_len = 1; data_len = 1;
XDPRINTF((2,"Got eff Dir Rights=%d\n", (int)result)); XDPRINTF((5,0,"Got eff Dir Rights=%d", (int)result));
} else completition = (uint8) -result; } else completition = (uint8) -result;
} else if (*p == 0x4){ /* Modify Max Right MAsk */ } else if (*p == 0x4){ /* Modify Max Right MAsk */
/******** MODIFY MAX RIGHT MASK ****************/ /******** MODIFY MAX RIGHT MASK ****************/
@ -350,7 +349,8 @@ static void handle_ncp_serv()
(int)*(p+3), (int)*(p+3),
(int)*(p+2), (int)*(p+2),
(*p==0x12) ? 0 (*p==0x12) ? 0
: ((*p==0x13) ? 1 : 2), task); : ((*p==0x13) ? 1 : 2),
(int)(ncprequest->task));
if (dirhandle > -1){ if (dirhandle > -1){
xdata->dirhandle = (uint8) dirhandle; xdata->dirhandle = (uint8) dirhandle;
xdata->right_mask = 0xff; xdata->right_mask = 0xff;
@ -388,7 +388,7 @@ static void handle_ncp_serv()
U16_TO_BE16(0, xdata->removable); U16_TO_BE16(0, xdata->removable);
} }
data_len = sizeof(struct XDATA); data_len = sizeof(struct XDATA);
XDPRINTF((2,"GIVE VOLUME INFO von :%s:\n", xdata->name)); XDPRINTF((5,0,"GIVE VOLUME INFO von :%s:", xdata->name));
result = 0; result = 0;
} }
} }
@ -468,18 +468,19 @@ static void handle_ncp_serv()
uint8 volnr = *(p+1); uint8 volnr = *(p+1);
uint32 id = GET_BE32(p+2); uint32 id = GET_BE32(p+2);
uint32 blocks = GET_BE32(p+6); uint32 blocks = GET_BE32(p+6);
XDPRINTF((2,"TODO:Change vol restriction vol=%d, id=0x%lx, Blocks=0x%lx", XDPRINTF((2,0,"TODO:Change vol restriction vol=%d, id=0x%lx, Blocks=0x%lx",
(int)volnr, id, blocks)); (int)volnr, id, blocks));
} else if (*p == 0x22) { } else if (*p == 0x22) {
/* remove Vol restrictions for Obj */ /* remove Vol restrictions for Obj */
uint8 volnr = *(p+1); uint8 volnr = *(p+1);
uint32 id = GET_BE32(p+2); uint32 id = GET_BE32(p+2);
XDPRINTF((2,"Renmove vol restriction vol=%d, id=0x%lx", XDPRINTF((2,0, "TODO:Remove vol restriction vol=%d, id=0x%lx",
(int)volnr, id)); (int)volnr, id));
} else if (*p == 0x25){ /* setting FILE INFO ??*/ } else if (*p == 0x25){ /* setting FILE INFO ??*/
/* TODO !!!!!!!!!!!!!!!!!!!! */ /* TODO !!!!!!!!!!!!!!!!!!!! */
do_druck++; do_druck++;
} else if (*p == 0x26) { /* Scan file or Dir for ext trustees */ } else if (*p == 0x26) { /* Scan file or Dir for ext trustees */
int sequenz = (int)*(p+2); /* trustee sequenz */ int sequenz = (int)*(p+2); /* trustee sequenz */
struct XDATA { struct XDATA {
@ -521,7 +522,7 @@ static void handle_ncp_serv()
struct XDATA { struct XDATA {
uint8 weisnicht[8]; /* ?????? */ uint8 weisnicht[8]; /* ?????? */
} *xdata = (struct XDATA*) responsedata; } *xdata = (struct XDATA*) responsedata;
XDPRINTF((2,"Get vol restriction vol=%d, id=0x%lx", XDPRINTF((5,0, "Get vol restriction vol=%d, id=0x%lx",
(int)volnr, id)); (int)volnr, id));
memset(xdata, 0, sizeof(struct XDATA)); memset(xdata, 0, sizeof(struct XDATA));
data_len=sizeof(struct XDATA); data_len=sizeof(struct XDATA);
@ -724,13 +725,13 @@ static void handle_ncp_serv()
break; break;
case 0xf3: { /* Map Direktory Number TO PATH */ case 0xf3: { /* Map Direktory Number TO PATH */
XDPRINTF((1,"TODO: Map Direktory Number TO PATH\n")); XDPRINTF((2,0, "TODO: Map Direktory Number TO PATH"));
completition = 0xff; completition = 0xff;
} }
break; break;
case 0xf4: { /* Map PATH TO Dir Entry */ case 0xf4: { /* Map PATH TO Dir Entry */
XDPRINTF((1,"TODO: Map PATH TO Dir Entry\n")); XDPRINTF((2,0, "TODO: Map PATH TO Dir Entry"));
completition = 0xff; completition = 0xff;
} }
break; break;
@ -743,7 +744,8 @@ static void handle_ncp_serv()
#endif #endif
case 0x18 : /* End of Job */ case 0x18 : /* End of Job */
nw_free_handles((task > 0) ? task : 1); nw_free_handles((ncprequest->task > 0) ?
(int) (ncprequest->task) : 1);
break; break;
case 0x19 : /* logout, some of this call is handled in ncpserv. */ case 0x19 : /* logout, some of this call is handled in ncpserv. */
@ -775,8 +777,16 @@ static void handle_ncp_serv()
case 0x21 : { /* Negotiate Buffer Size, Packetsize */ case 0x21 : { /* Negotiate Buffer Size, Packetsize */
int wantsize = GET_BE16((uint8*)ncprequest); int wantsize = GET_BE16((uint8*)ncprequest);
uint8 *getsize=responsedata; uint8 *getsize=responsedata;
U16_TO_BE16(min(0x200, wantsize), getsize);
#if IPX_DATA_GR_546
wantsize = min(0x400, wantsize);
#else
wantsize = min(0x200, wantsize);
#endif
U16_TO_BE16(wantsize, getsize);
data_len = 2; data_len = 2;
XDPRINTF((5,0, "Negotiate Buffer size = 0x%04x,(%d)",
(int) wantsize, (int) wantsize));
} }
break; break;
@ -819,7 +829,7 @@ static void handle_ncp_serv()
uint8 ext_fhandle[2]; /* all zero */ uint8 ext_fhandle[2]; /* all zero */
} *input = (struct INPUT *)ncprequest; } *input = (struct INPUT *)ncprequest;
uint32 fhandle = GET_BE32(input->fhandle); uint32 fhandle = GET_BE32(input->fhandle);
XDPRINTF((1,"TODO: COMMIT FILE:fhandle=%ld\n", fhandle)); XDPRINTF((2,0, "TODO: COMMIT FILE:fhandle=%ld", fhandle));
/* TODO */ /* TODO */
; ;
} break; } break;
@ -1196,7 +1206,8 @@ static void handle_ncp_serv()
#if 0 #if 0
case 0x61 : { /* Negotiate Buffer Size, Packetsize new ??? */ case 0x61 : { /* Negotiate Buffer Size, Packetsize new ??? */
/* same request as 0x21 */ /* > 3.11 */
/* similar request as 0x21 */
} }
#endif #endif
@ -1213,41 +1224,23 @@ static void handle_ncp_serv()
} }
if (nw_debug && (completition == 0xfb || (do_druck == 1))) { /* UNKWON FUNCTION od. TYPE */ if (nw_debug && (completition == 0xfb || (do_druck == 1))) { /* UNKWON FUNCTION od. TYPE */
int x_nw_debug = nw_debug; pr_debug_request();
if (nw_debug == 1 || do_druck == 1) {
int j = requestlen;
nw_debug = 2;
XDPRINTF((2,"NCP REQUEST: seq:%d, task:%d, reserved:0x%x, func:0x%x\n",
sequence, task, reserved, function));
if (j > 0){
uint8 *p=requestdata;
XDPRINTF((2,"len %d, DATA:", j));
while (j--) {
int c = *p++;
if (c > 32 && c < 127) XDPRINTF((2,",\'%c\'", (char) c));
else XDPRINTF((2,",0x%x", c));
}
XDPRINTF((2,"\n"));
}
}
if (completition == 0xfb) if (completition == 0xfb)
XDPRINTF((1,"UNKNOWN FUNCTION od. TYPE: 0x%x\n", function)); XDPRINTF((0,0, "UNKNOWN FUNCTION od. TYPE: 0x%x", function));
else if (data_len){ else if (data_len){
int j = data_len; int j = data_len;
uint8 *p = responsedata; uint8 *p = responsedata;
XDPRINTF((2,"RSPONSE: len %d, DATA:", data_len)); XDPRINTF((0,2, "RSPONSE: len %d, DATA:", data_len));
while (j--) { while (j--) {
int c = *p++; int c = *p++;
if (c > 32 && c < 127) XDPRINTF((2,",\'%c\'", (char) c)); if (c > 32 && c < 127) XDPRINTF((0,3,",\'%c\'", (char) c));
else XDPRINTF((2,",0x%x", c)); else XDPRINTF((0,3,",0x%x", c));
} }
XDPRINTF((2,"\n")); XDPRINTF((0,1, NULL));
} }
nw_debug = x_nw_debug;
} }
ncp_response(sequence, completition, data_len); ncp_response(ncprequest->sequence, completition, data_len);
if (nw_debug != 99 && nw_debug != -99) nw_debug = org_nw_debug; nw_debug = org_nw_debug;
else if (nw_debug == -99) nw_debug = 0;
} }
extern int t_errno; extern int t_errno;
@ -1305,7 +1298,7 @@ int main(int argc, char **argv)
init_tools(NWCONN); init_tools(NWCONN);
DPRINTF(("FATHER PID=%d, ADDR=%s CON:%s\n", father_pid, *(argv+2), *(argv+3))); XDPRINTF((1, 0, "FATHER PID=%d, ADDR=%s CON:%s", father_pid, *(argv+2), *(argv+3)));
adr_to_ipx_addr(&from_addr, *(argv+2)); adr_to_ipx_addr(&from_addr, *(argv+2));
if (nw_init_connect()) exit(1); if (nw_init_connect()) exit(1);
@ -1339,12 +1332,12 @@ int main(int argc, char **argv)
ncpresponse->connect_status = (uint8) 0; ncpresponse->connect_status = (uint8) 0;
if (data_len > 0) { if (data_len > 0) {
if (fl_get_debug) get_new_debug(); if (fl_get_debug) get_new_debug();
XDPRINTF((99, "NWCONN GOT DATA len = %d\n",data_len)); XDPRINTF((99, 0, "NWCONN GOT DATA len = %d",data_len));
if ((ncp_type = (int)GET_BE16(ncprequest->type)) == 0x3333) { if ((ncp_type = (int)GET_BE16(ncprequest->type)) == 0x3333) {
/* OK for direct sending */ /* OK for direct sending */
data_len -= sizeof(NCPRESPONSE); data_len -= sizeof(NCPRESPONSE);
XDPRINTF((99, "NWCONN:direct sending:type 0x3333, completition=0x%x, len=%d\n", XDPRINTF((99,0, "NWCONN:direct sending:type 0x3333, completition=0x%x, len=%d",
(int)(ncprequest->function), data_len)); (int)(ncprequest->function), data_len));
if (data_len) memcpy(responsedata, readbuff+sizeof(NCPRESPONSE), data_len); if (data_len) memcpy(responsedata, readbuff+sizeof(NCPRESPONSE), data_len);
ncpresponse->connect_status = ((NCPRESPONSE*)readbuff)->connect_status; ncpresponse->connect_status = ((NCPRESPONSE*)readbuff)->connect_status;

68
nwdbm.c
View File

@ -1,4 +1,4 @@
/* nwdbm.c 05-Dec-95 data base for mars_nwe */ /* nwdbm.c 24-Dec-95 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
@ -89,7 +89,7 @@ static int name_match(uint8 *s, uint8 *p)
int find_obj_id(NETOBJ *o, uint32 last_obj_id) int find_obj_id(NETOBJ *o, uint32 last_obj_id)
{ {
int result = -0xfc; /* no Object */ int result = -0xfc; /* no Object */
XDPRINTF((2, "findobj_id OBJ=%s, type=0x%x, lastid=0x%lx \n", XDPRINTF((2, 0,"findobj_id OBJ=%s, type=0x%x, lastid=0x%lx",
o->name, (int)o->type, last_obj_id)); o->name, (int)o->type, last_obj_id));
if (!dbminit(fnobj)){ if (!dbminit(fnobj)){
@ -109,11 +109,11 @@ int find_obj_id(NETOBJ *o, uint32 last_obj_id)
NETOBJ *obj = (NETOBJ*)data.dptr; NETOBJ *obj = (NETOBJ*)data.dptr;
if ( ( ((int)obj->type == (int)o->type) || o->type == MAX_U16) && if ( ( ((int)obj->type == (int)o->type) || o->type == MAX_U16) &&
name_match(obj->name, o->name)) { name_match(obj->name, o->name)) {
XDPRINTF((2, "found OBJ=%s, id=0x%lx\n", obj->name, obj->id)); XDPRINTF((2, 0, "found OBJ=%s, id=0x%lx", obj->name, obj->id));
result = 0; result = 0;
memcpy((char *)o, (char*)obj, sizeof(NETOBJ)); memcpy((char *)o, (char*)obj, sizeof(NETOBJ));
} else { } else {
XDPRINTF((3,"not found,but NAME=%s, type=0x%x, id=0x%lx \n", XDPRINTF((3,0,"not found,but NAME=%s, type=0x%x, id=0x%lx",
obj->name, (int)obj->type, obj->id)); obj->name, (int)obj->type, obj->id));
} }
} }
@ -133,7 +133,7 @@ static int loc_delete_property(uint32 obj_id, uint8 *prop_name, uint8 prop_id)
int result = -0xfb; /* no property */ int result = -0xfb; /* no property */
memset(xset, 0, sizeof(xset)); memset(xset, 0, sizeof(xset));
if (!prop_id) { if (!prop_id) {
XDPRINTF((2, "loc_delete_property obj_id=%d, prop=%s\n", obj_id, prop_name)); XDPRINTF((2,0, "loc_delete_property obj_id=%d, prop=%s", obj_id, prop_name));
if (!dbminit(fnprop)){ if (!dbminit(fnprop)){
for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) { for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) {
NETPROP *p=(NETPROP*)key.dptr; NETPROP *p=(NETPROP*)key.dptr;
@ -141,7 +141,7 @@ static int loc_delete_property(uint32 obj_id, uint8 *prop_name, uint8 prop_id)
data = fetch(key); data = fetch(key);
p = (NETPROP*)data.dptr; p = (NETPROP*)data.dptr;
if (p != NULL && name_match(p->name, prop_name)){ if (p != NULL && name_match(p->name, prop_name)){
XDPRINTF((2, "found prop: %s, id=%d for deleting\n", p->name, (int)p->id)); XDPRINTF((2,0, "found prop: %s, id=%d for deleting", p->name, (int)p->id));
if ((int)(p->id) > result) result = (int)(p->id); if ((int)(p->id) > result) result = (int)(p->id);
xset[p->id]++; xset[p->id]++;
} }
@ -150,7 +150,7 @@ static int loc_delete_property(uint32 obj_id, uint8 *prop_name, uint8 prop_id)
} else result = -0xff; } else result = -0xff;
dbmclose(); dbmclose();
} else { } else {
XDPRINTF((2, "loc_delete_property obj_id=%d, prop_id=%d\n", obj_id, (int)prop_id)); XDPRINTF((2,0, "loc_delete_property obj_id=%d, prop_id=%d", obj_id, (int)prop_id));
xset[prop_id]++; xset[prop_id]++;
result = prop_id; result = prop_id;
} }
@ -213,7 +213,7 @@ static int loc_delete_obj(uint32 objid)
int nw_delete_obj(NETOBJ *obj) int nw_delete_obj(NETOBJ *obj)
{ {
int result = find_obj_id(obj, 0); int result = find_obj_id(obj, 0);
XDPRINTF((2, "nw_delete_obj obj_id=%d, obj_name=%s\n", obj->id, obj->name)); XDPRINTF((2,0, "nw_delete_obj obj_id=%d, obj_name=%s", obj->id, obj->name));
if (!result) result=loc_delete_obj(obj->id); if (!result) result=loc_delete_obj(obj->id);
return(result); return(result);
} }
@ -230,7 +230,7 @@ int nw_rename_obj(NETOBJ *o, uint8 *newname)
data = fetch(key); data = fetch(key);
if (data.dptr != NULL){ if (data.dptr != NULL){
NETOBJ *obj=(NETOBJ*)data.dptr; NETOBJ *obj=(NETOBJ*)data.dptr;
XDPRINTF((2, "rename_obj:got OBJ name=%s, id = 0x%x,\n", obj->name, (int)obj->id)); XDPRINTF((2,0, "rename_obj:got OBJ name=%s, id = 0x%x", obj->name, (int)obj->id));
strncpy(obj->name, newname, 48); strncpy(obj->name, newname, 48);
if (!store(key, data)) result=0; if (!store(key, data)) result=0;
} }
@ -252,7 +252,7 @@ int nw_change_obj_security(NETOBJ *o, int newsecurity)
data = fetch(key); data = fetch(key);
if (data.dptr != NULL){ if (data.dptr != NULL){
NETOBJ *obj=(NETOBJ*)data.dptr; NETOBJ *obj=(NETOBJ*)data.dptr;
XDPRINTF((2, "change_obj_security:got OBJ name=%s, id = 0x%x,\n", obj->name, (int)obj->id)); XDPRINTF((2,0, "change_obj_security:got OBJ name=%s, id = 0x%x", obj->name, (int)obj->id));
obj->security = (uint8) newsecurity; obj->security = (uint8) newsecurity;
if (!store(key, data)) result=0; if (!store(key, data)) result=0;
} }
@ -265,14 +265,14 @@ int nw_change_obj_security(NETOBJ *o, int newsecurity)
int nw_get_obj(NETOBJ *o) int nw_get_obj(NETOBJ *o)
{ {
int result = -0xfc; /* no Object */ int result = -0xfc; /* no Object */
XDPRINTF((2, "nw_get_obj von OBJ id = 0x%x,\n", (int)o->id)); XDPRINTF((2,0, "nw_get_obj von OBJ id = 0x%x", (int)o->id));
if (!dbminit(fnobj)){ if (!dbminit(fnobj)){
key.dsize = NETOBJ_KEY_SIZE; key.dsize = NETOBJ_KEY_SIZE;
key.dptr = (char*)o; key.dptr = (char*)o;
data = fetch(key); data = fetch(key);
if (data.dptr != NULL){ if (data.dptr != NULL){
NETOBJ *obj=(NETOBJ*)data.dptr; NETOBJ *obj=(NETOBJ*)data.dptr;
XDPRINTF((2, "got OBJ name=%s, id = 0x%x,\n", obj->name, (int)obj->id)); XDPRINTF((2,0, "got OBJ name=%s, id = 0x%x", obj->name, (int)obj->id));
memcpy(o, data.dptr, sizeof(NETOBJ)); memcpy(o, data.dptr, sizeof(NETOBJ));
result = 0; result = 0;
} }
@ -284,7 +284,7 @@ int nw_get_obj(NETOBJ *o)
static int find_prop_id(NETPROP *p, uint32 obj_id, int last_prop_id) static int find_prop_id(NETPROP *p, uint32 obj_id, int last_prop_id)
{ {
int result = -0xfb; /* no Property */ int result = -0xfb; /* no Property */
XDPRINTF((2, "find Prop id von name=0x%x:%s, lastid=%d\n", XDPRINTF((2,0, "find Prop id von name=0x%x:%s, lastid=%d",
obj_id, p->name, last_prop_id)); obj_id, p->name, last_prop_id));
if (!dbminit(fnprop)){ if (!dbminit(fnprop)){
int flag = (last_prop_id) ? 0 : 1; int flag = (last_prop_id) ? 0 : 1;
@ -296,7 +296,7 @@ static int find_prop_id(NETPROP *p, uint32 obj_id, int last_prop_id)
data = fetch(key); data = fetch(key);
prop = (NETPROP*)data.dptr; prop = (NETPROP*)data.dptr;
if (data.dptr != NULL && name_match(prop->name, p->name) ) { if (data.dptr != NULL && name_match(prop->name, p->name) ) {
XDPRINTF((2, "found PROP %s, id=0x%x\n", prop->name, (int) prop->id)); XDPRINTF((2,0, "found PROP %s, id=0x%x", prop->name, (int) prop->id));
result = 0; result = 0;
memcpy(p, prop, sizeof(NETPROP)); memcpy(p, prop, sizeof(NETPROP));
break; break;
@ -316,7 +316,7 @@ static int find_prop_id(NETPROP *p, uint32 obj_id, int last_prop_id)
static int loc_change_prop_security(NETPROP *p, uint32 obj_id) static int loc_change_prop_security(NETPROP *p, uint32 obj_id)
{ {
int result = -0xfb; /* no Property */ int result = -0xfb; /* no Property */
XDPRINTF((2, "loc_change_prop_security Prop id von name=0x%x:%s\n", obj_id, p->name)); XDPRINTF((2,0, "loc_change_prop_security Prop id von name=0x%x:%s", obj_id, p->name));
if (!dbminit(fnprop)){ if (!dbminit(fnprop)){
for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) { for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) {
NETPROP *prop=(NETPROP*)key.dptr; NETPROP *prop=(NETPROP*)key.dptr;
@ -325,7 +325,7 @@ static int loc_change_prop_security(NETPROP *p, uint32 obj_id)
prop = (NETPROP*)data.dptr; prop = (NETPROP*)data.dptr;
if (data.dptr != NULL && name_match(prop->name, p->name) ) { if (data.dptr != NULL && name_match(prop->name, p->name) ) {
uint8 security = p->security; uint8 security = p->security;
XDPRINTF((2, "found PROP %s, id=0x%x\n", prop->name, (int) prop->id)); XDPRINTF((2,0, "found PROP %s, id=0x%x", prop->name, (int) prop->id));
result = 0; result = 0;
memcpy(p, prop, sizeof(NETPROP)); memcpy(p, prop, sizeof(NETPROP));
p->security = security; p->security = security;
@ -359,7 +359,7 @@ static int loc_get_prop_val(uint32 obj_id, int prop_id, int segment,
if (data.dptr != NULL){ if (data.dptr != NULL){
NETVAL *v = (NETVAL*)data.dptr; NETVAL *v = (NETVAL*)data.dptr;
if (NULL != property_value) memcpy(property_value, v->value, 128); if (NULL != property_value) memcpy(property_value, v->value, 128);
XDPRINTF((2, "found VAL 0x%x, %d, %d\n", obj_id, prop_id, segment)); XDPRINTF((2,0, "found VAL 0x%x, %d, %d", obj_id, prop_id, segment));
result = 0; result = 0;
val.segment++; val.segment++;
data = fetch(key); data = fetch(key);
@ -387,7 +387,7 @@ int prop_find_member(uint32 obj_id, int prop_id, uint32 member_id)
NETVAL *v = (NETVAL*)data.dptr; NETVAL *v = (NETVAL*)data.dptr;
uint8 *p=v->value; uint8 *p=v->value;
int k=0; int k=0;
XDPRINTF((2, "found VAL 0x%x, %d\n", obj_id, prop_id)); XDPRINTF((2,0, "found VAL 0x%x, %d", obj_id, prop_id));
while (k++ < 32){ while (k++ < 32){
uint32 id = GET_BE32(p); uint32 id = GET_BE32(p);
if (id == member_id) { if (id == member_id) {
@ -524,7 +524,7 @@ int nw_get_prop_val_by_obj_id(uint32 obj_id,
NETPROP prop; NETPROP prop;
int result=-0xff; int result=-0xff;
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_get_prop_val_by_obj_id,id=0x%x, prop=%s, segment=%d\n", XDPRINTF((2,0, "nw_get_prop_val_by_obj_id,id=0x%x, prop=%s, segment=%d",
obj_id, prop.name, segment_nr)); obj_id, prop.name, segment_nr));
if ((result=find_first_prop_id(&prop, obj_id))==0){ if ((result=find_first_prop_id(&prop, obj_id))==0){
@ -568,7 +568,7 @@ int nw_delete_property(int object_type,
int result=-0xff; int result=-0xff;
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)prop_name_x, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop_name_x, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_delete_property obj=%s, prop=%s, type=0x%x\n", XDPRINTF((2,0, "nw_delete_property obj=%s, prop=%s, type=0x%x",
obj.name, prop_name_x, object_type)); obj.name, prop_name_x, object_type));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
if ((result = find_obj_id(&obj, 0)) == 0){ if ((result = find_obj_id(&obj, 0)) == 0){
@ -590,7 +590,7 @@ int nw_is_obj_in_set(int object_type,
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen); strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_is_obj_in_set obj=%s,0x%x, member=%s,0x%x, prop=%s\n", XDPRINTF((2,0, "nw_is_obj_in_set obj=%s,0x%x, member=%s,0x%x, prop=%s",
obj.name, object_type, mobj.name, member_type, prop.name)); obj.name, object_type, mobj.name, member_type, prop.name));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
mobj.type = (uint16) member_type; mobj.type = (uint16) member_type;
@ -617,7 +617,7 @@ int nw_add_obj_to_set(int object_type,
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen); strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_add_obj_to_set obj=%s,0x%x, member=%s,0x%x, prop=%s\n", XDPRINTF((2,0, "nw_add_obj_to_set obj=%s,0x%x, member=%s,0x%x, prop=%s",
obj.name, object_type, mobj.name, member_type, prop.name)); obj.name, object_type, mobj.name, member_type, prop.name));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
mobj.type = (uint16) member_type; mobj.type = (uint16) member_type;
@ -644,7 +644,7 @@ int nw_delete_obj_from_set(int object_type,
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen); strmaxcpy((char*)mobj.name, (char*)member_name, member_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_delete_obj_from_set obj=%s,0x%x, member=%s,0x%x, prop=%s\n", XDPRINTF((2,0, "nw_delete_obj_from_set obj=%s,0x%x, member=%s,0x%x, prop=%s",
obj.name, object_type, mobj.name, member_type, prop.name)); obj.name, object_type, mobj.name, member_type, prop.name));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
mobj.type = (uint16) member_type; mobj.type = (uint16) member_type;
@ -670,7 +670,7 @@ int nw_write_prop_value(int object_type,
int result=-0xff; int result=-0xff;
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_write_prop_value obj=%s, prop=%s, type=0x%x, segment=%d\n", XDPRINTF((2,0, "nw_write_prop_value obj=%s, prop=%s, type=0x%x, segment=%d",
obj.name, prop.name, object_type, segment_nr)); obj.name, prop.name, object_type, segment_nr));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
@ -696,7 +696,7 @@ int nw_change_prop_security(int object_type,
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
prop.security = (uint8)prop_security; prop.security = (uint8)prop_security;
XDPRINTF((2, "nw_change_prop_security obj=%s,0x%x, prop=%s\n", XDPRINTF((2,0, "nw_change_prop_security obj=%s,0x%x, prop=%s",
obj.name, object_type, prop.name)); obj.name, object_type, prop.name));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
if ((result = find_obj_id(&obj, 0)) == 0){ if ((result = find_obj_id(&obj, 0)) == 0){
@ -717,7 +717,7 @@ int nw_scan_property(NETPROP *prop,
int result; int result;
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)prop->name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop->name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_scan_property obj=%s, prop=%s, type=0x%x, last_scan=0x%lx\n", XDPRINTF((2,0, "nw_scan_property obj=%s, prop=%s, type=0x%x, last_scan=0x%lx",
obj.name, prop->name, object_type, *last_scan)); obj.name, prop->name, object_type, *last_scan));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
@ -744,9 +744,9 @@ int nw_get_prop_val_str(uint32 q_id, char *propname, uint8 *buff)
buff, &more_segments, &property_flags); buff, &more_segments, &property_flags);
if (result > -1) { if (result > -1) {
result=strlen(buff); result=strlen(buff);
XDPRINTF((2, "nw_get_prop_val_str:%s strlen=%d\n", propname, result)); XDPRINTF((2,0, "nw_get_prop_val_str:%s strlen=%d", propname, result));
} else } else
XDPRINTF((2, "nw_get_prop_val_str:%s, result=0x%x\n", propname, result)); XDPRINTF((2,0, "nw_get_prop_val_str:%s, result=0x%x", propname, result));
return(result); return(result);
} }
@ -759,7 +759,7 @@ int nw_create_obj(NETOBJ *obj, uint32 wanted_id)
*/ */
{ {
int result = 0; /* OK */ int result = 0; /* OK */
XDPRINTF((2, "creat OBJ=%s,type=0x%x\n", obj->name, (int)obj->type)); XDPRINTF((2,0, "creat OBJ=%s,type=0x%x", obj->name, (int)obj->type));
if (!dbminit(fnobj)){ if (!dbminit(fnobj)){
for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) { for (key = firstkey(); key.dptr != NULL; key = nextkey(key)) {
data = fetch(key); data = fetch(key);
@ -857,7 +857,7 @@ int nw_create_prop(int object_type,
int result=-0xff; int result=-0xff;
strmaxcpy((char*)obj.name, (char*)object_name, object_namlen); strmaxcpy((char*)obj.name, (char*)object_name, object_namlen);
strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen); strmaxcpy((char*)prop.name, (char*)prop_name, prop_namlen);
XDPRINTF((2, "nw_create_prop obj=%s, prop=%s, type=0x%x\n", XDPRINTF((2,0, "nw_create_prop obj=%s, prop=%s, type=0x%x",
obj.name, prop.name, object_type)); obj.name, prop.name, object_type));
obj.type = (uint16) object_type; obj.type = (uint16) object_type;
if ((result = find_obj_id(&obj, 0)) == 0){ if ((result = find_obj_id(&obj, 0)) == 0){
@ -909,14 +909,14 @@ struct passwd *nw_getpwnam(uint32 obj_id)
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));
XDPRINTF((2, "FOUND obj_id=0x%x, pwnam=%s, gid=%d, uid=%d\n", 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 (); endpwent ();
return(&pwstat); return(&pwstat);
} }
endpwent (); endpwent ();
} }
XDPRINTF((2, "NOT FOUND PWNAM of obj_id=0x%x\n", obj_id)); XDPRINTF((2,0, "NOT FOUND PWNAM of obj_id=0x%x", obj_id));
return(NULL); return(NULL);
} }
@ -962,7 +962,7 @@ int nw_set_passwd(uint32 obj_id, char *password)
U32_TO_BE32(obj_id, s_uid); U32_TO_BE32(obj_id, s_uid);
shuffle(s_uid, password, strlen(password), passwd); shuffle(s_uid, password, strlen(password), passwd);
#if 0 #if 0
XDPRINTF((2, "password %s->0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n", XDPRINTF((2,0, "password %s->0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x",
password, password,
(int)passwd[0], (int)passwd[0],
(int)passwd[1], (int)passwd[1],
@ -1031,7 +1031,7 @@ static void add_pr_queue(uint32 q_id,
uint32 su_id, uint32 ge_id) uint32 su_id, uint32 ge_id)
{ {
uint8 buff[12]; uint8 buff[12];
XDPRINTF((2, "ADD Q=%s, V=%s, C=%s\n", q_name, q_directory, q_command)); XDPRINTF((2,0, "ADD Q=%s, V=%s, C=%s", q_name, q_directory, q_command));
U32_TO_BE32(su_id, buff); U32_TO_BE32(su_id, buff);
q_id = q_id =
nw_new_create_prop(q_id, q_name, 0x3, O_FL_DYNA, 0x31, nw_new_create_prop(q_id, q_name, 0x3, O_FL_DYNA, 0x31,

View File

@ -1,4 +1,4 @@
/* nwroute.c 20-Dec-95 */ /* nwroute.c 24-Dec-95 */
/* (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
@ -44,7 +44,7 @@ static void insert_delete_net(uint32 destnet,
int freeslot=-1; int freeslot=-1;
NW_ROUTES *nr=NULL; NW_ROUTES *nr=NULL;
XDPRINTF((3,"%s net:0x%X, over 0x%X, 0x%02x:%02x:%02x:%02x:%02x:%02x\n", XDPRINTF((3,0,"%s net:0x%X, over 0x%X, 0x%02x:%02x:%02x:%02x:%02x:%02x",
(do_delete) ? "DEL" : "INS", destnet, rnet, (do_delete) ? "DEL" : "INS", destnet, rnet,
(int)rnode[0], (int)rnode[1], (int)rnode[2], (int)rnode[0], (int)rnode[1], (int)rnode[2],
(int)rnode[3], (int)rnode[4], (int)rnode[5])); (int)rnode[3], (int)rnode[4], (int)rnode[5]));
@ -58,7 +58,7 @@ static void insert_delete_net(uint32 destnet,
k=-1; k=-1;
while (++k < anz_routes && nw_routes[k]->net != destnet) { while (++k < anz_routes && nw_routes[k]->net != destnet) {
XDPRINTF((3,"NET 0x%X is routed\n", nw_routes[k]->net)); XDPRINTF((3,0, "NET 0x%X is routed", nw_routes[k]->net));
if (freeslot < 0 && !nw_routes[k]->net) freeslot=k; if (freeslot < 0 && !nw_routes[k]->net) freeslot=k;
} }
@ -79,12 +79,12 @@ static void insert_delete_net(uint32 destnet,
if (nr->rnet == rnet && if (nr->rnet == rnet &&
IPXCMPNODE(nr->rnode, rnode) ) { IPXCMPNODE(nr->rnode, rnode) ) {
/* only delete the routes, which we have inserted */ /* only delete the routes, which we have inserted */
XDPRINTF((2,"ROUTE DEL NET=0x%X over Router NET 0x%X\n", XDPRINTF((2,0,"ROUTE DEL NET=0x%X over Router NET 0x%X",
nr->net, rnet)); nr->net, rnet));
ipx_route_del(nr->net); ipx_route_del(nr->net);
nr->net = 0L; nr->net = 0L;
} else { } else {
XDPRINTF((3,"ROUTE NOT deleted NET=0x%X, RNET=0X%X\n", XDPRINTF((3,0,"ROUTE NOT deleted NET=0x%X, RNET=0X%X",
nr->net, rnet)); nr->net, rnet));
} }
return; return;
@ -96,7 +96,7 @@ static void insert_delete_net(uint32 destnet,
nr->ticks = ticks; nr->ticks = ticks;
nr->rnet = rnet; nr->rnet = rnet;
memcpy(nr->rnode, rnode, IPX_NODE_SIZE); memcpy(nr->rnode, rnode, IPX_NODE_SIZE);
XDPRINTF((2,"ADD ROUTE NET=0x%X, over 0x%X, 0x%02x:%02x:%02x:%02x:%02x:%02x\n", XDPRINTF((2,0,"ADD ROUTE NET=0x%X, over 0x%X, 0x%02x:%02x:%02x:%02x:%02x:%02x",
nr->net, nr->rnet, nr->net, nr->rnet,
(int)nr->rnode[0], (int)nr->rnode[1], (int)nr->rnode[2], (int)nr->rnode[0], (int)nr->rnode[1], (int)nr->rnode[2],
(int)nr->rnode[3], (int)nr->rnode[4], (int)nr->rnode[5])); (int)nr->rnode[3], (int)nr->rnode[4], (int)nr->rnode[5]));
@ -174,14 +174,14 @@ static void send_rip_buff(ipxAddr_t *from_addr)
if (nw_debug) { if (nw_debug) {
uint8 *p = rip_buff; uint8 *p = rip_buff;
int operation = GET_BE16(p); int operation = GET_BE16(p);
XDPRINTF((2,"Send Rip %s entries=%d\n", XDPRINTF((2,0, "Send Rip %s entries=%d",
(operation==1) ? "Request" : "Response", rentries)); (operation==1) ? "Request" : "Response", rentries));
p+=2; p+=2;
while (rentries--) { while (rentries--) {
uint32 net = GET_BE32(p); uint32 net = GET_BE32(p);
uint16 hops = GET_BE16(p+4); uint16 hops = GET_BE16(p+4);
uint16 ticks = GET_BE16(p+6); uint16 ticks = GET_BE16(p+6);
XDPRINTF((2,"hops=%3d, ticks %3d, network:%02x.%02x.%02x.%02x\n", XDPRINTF((2,0, "hops=%3d, ticks %3d, network:%02x.%02x.%02x.%02x",
(int)hops, (int)ticks, (int)*(p), (int)*(p+1), (int)*(p+2), (int)*(p+3))); (int)hops, (int)ticks, (int)*(p), (int)*(p+1), (int)*(p+2), (int)*(p+3)));
p+=8; p+=8;
} }
@ -233,13 +233,13 @@ void handle_rip(int fd, int ipx_pack_typ,
uint8 *p = ((uint8*)ipxdata)+2; uint8 *p = ((uint8*)ipxdata)+2;
int is_response = operation==2; int is_response = operation==2;
XDPRINTF((2,"Got Rip %s entries=%d from: %s\n", XDPRINTF((2,0, "Got Rip %s entries=%d from: %s",
(!is_response) ? "Request" : "Response", entries, (!is_response) ? "Request" : "Response", entries,
visable_ipx_adr(from_addr))); visable_ipx_adr(from_addr)));
if (!is_response) { if (!is_response) {
if (operation != 1) { if (operation != 1) {
XDPRINTF((1,"UNKNOWN RIP operation %d\n", operation)); XDPRINTF((1,0, "UNKNOWN RIP operation %d", operation));
return; return;
} }
init_rip_buff(GET_BE32(from_addr->net), 0); init_rip_buff(GET_BE32(from_addr->net), 0);
@ -249,7 +249,7 @@ void handle_rip(int fd, int ipx_pack_typ,
uint32 net = GET_BE32(p); uint32 net = GET_BE32(p);
uint16 hops = GET_BE16(p+4); uint16 hops = GET_BE16(p+4);
uint16 ticks = GET_BE16(p+6); uint16 ticks = GET_BE16(p+6);
XDPRINTF((2,"hops=%3d, ticks %3d, network:%02x.%02x.%02x.%02x\n", XDPRINTF((2,0,"hops=%3d, ticks %3d, network:%02x.%02x.%02x.%02x",
(int)hops, (int)ticks, (int)*(p), (int)*(p+1), (int)*(p+2), (int)*(p+3))); (int)hops, (int)ticks, (int)*(p), (int)*(p+1), (int)*(p+2), (int)*(p+3)));
if (is_response) { if (is_response) {

View File

@ -69,7 +69,7 @@ static void inform_ncpserv(void)
{ {
if (bytes_to_write_to_ncpserv && pid_ncpserv > -1) { if (bytes_to_write_to_ncpserv && pid_ncpserv > -1) {
#if 0 #if 0
XDPRINTF((2, "inform_ncpserv bytes=%d\n", bytes_to_write_to_ncpserv)); XDPRINTF((2, 0,"inform_ncpserv bytes=%d", bytes_to_write_to_ncpserv));
kill(pid_ncpserv, SIGHUP); /* tell ncpserv to read input */ kill(pid_ncpserv, SIGHUP); /* tell ncpserv to read input */
#endif #endif
bytes_to_write_to_ncpserv=0; bytes_to_write_to_ncpserv=0;
@ -79,7 +79,7 @@ static void inform_ncpserv(void)
static void write_to_ncpserv(int what, int connection, static void write_to_ncpserv(int what, int connection,
char *data, int data_size) char *data, int data_size)
{ {
XDPRINTF((2, "write_to_ncpserv what=0x%x, conn=%d, data_size=%d\n", XDPRINTF((2, 0, "write_to_ncpserv what=0x%x, conn=%d, data_size=%d",
what, connection, data_size)); what, connection, data_size));
switch (what) { switch (what) {
@ -392,7 +392,7 @@ void get_server_data(char *name,
client_mode = 0; /* only start once */ client_mode = 0; /* only start once */
} }
} }
XDPRINTF((2,"NW386 %s found at:%s\n", name, visable_ipx_adr(adr))); XDPRINTF((2,0,"NW386 %s found at:%s", name, visable_ipx_adr(adr)));
ins_del_bind_net_addr(name, adr); ins_del_bind_net_addr(name, adr);
} }
@ -405,14 +405,14 @@ static void handle_sap(int fd,
int query_type = GET_BE16(ipxdata->sqp.query_type); int query_type = GET_BE16(ipxdata->sqp.query_type);
int server_type = GET_BE16(ipxdata->sqp.server_type); int server_type = GET_BE16(ipxdata->sqp.server_type);
if (query_type == 3) { if (query_type == 3) {
XDPRINTF((2,"SAP NEAREST SERVER request typ=%d von %s\n", XDPRINTF((2,0,"SAP NEAREST SERVER request typ=%d von %s",
server_type, visable_ipx_adr(from_addr))); server_type, visable_ipx_adr(from_addr)));
if (server_type == 4) { if (server_type == 4) {
/* Get Nearest File Server */ /* Get Nearest File Server */
send_server_respons(fd, ipx_pack_typ, 4, server_type, from_addr); send_server_respons(fd, ipx_pack_typ, 4, server_type, from_addr);
} }
} else if (query_type == 1) { /* general Request */ } else if (query_type == 1) { /* general Request */
XDPRINTF((2,"SAP GENERAL request server_type =%d\n", server_type)); XDPRINTF((2,0, "SAP GENERAL request server_type =%d", server_type));
if (server_type == 4) { if (server_type == 4) {
/* Get General File Server Request */ /* Get General File Server Request */
send_server_respons(fd, ipx_pack_typ, 4, server_type, from_addr); send_server_respons(fd, ipx_pack_typ, 4, server_type, from_addr);
@ -423,19 +423,19 @@ static void handle_sap(int fd,
*/ */
int entries = (data_len-2) / sizeof(SAPS); int entries = (data_len-2) / sizeof(SAPS);
uint8 *p = ((uint8*)ipxdata)+2; uint8 *p = ((uint8*)ipxdata)+2;
XDPRINTF((2,"SAP PERIODIC (entries=%d) from %s\n", entries, visable_ipx_adr(from_addr))); XDPRINTF((2,0,"SAP PERIODIC (entries=%d) from %s", entries, visable_ipx_adr(from_addr)));
while (entries--) { while (entries--) {
int type = GET_BE16(p); int type = GET_BE16(p);
uint8 *name = p+2; uint8 *name = p+2;
ipxAddr_t *ad = (ipxAddr_t*) (p+50); ipxAddr_t *ad = (ipxAddr_t*) (p+50);
int hops = GET_BE16(p+ sizeof(SAPS) -2); int hops = GET_BE16(p+ sizeof(SAPS) -2);
XDPRINTF((2,"TYP=%2d,hops=%2d, Addr=%s, Name=%s\n", type, hops, XDPRINTF((2,0, "TYP=%2d,hops=%2d, Addr=%s, Name=%s", type, hops,
visable_ipx_adr(ad), name)); visable_ipx_adr(ad), name));
if (type == 4 && strcmp(name, my_nwname)) { /* from Fileserver */ if (type == 4 && strcmp(name, my_nwname)) { /* from Fileserver */
if (16 == hops) { if (16 == hops) {
/* shutdown */ /* shutdown */
XDPRINTF((2,"SERVER %s IS GOING DOWN\n", name)); XDPRINTF((2,0, "SERVER %s IS GOING DOWN", name));
ins_del_bind_net_addr(name, NULL); ins_del_bind_net_addr(name, NULL);
} else { } else {
get_server_data(name, ad, from_addr); get_server_data(name, ad, from_addr);
@ -444,7 +444,7 @@ static void handle_sap(int fd,
p+=sizeof(SAPS); p+=sizeof(SAPS);
} /* while */ } /* while */
} else { } else {
XDPRINTF((1,"UNKNOWN SAP query %x, server %x\n", query_type, server_type)); XDPRINTF((1,0, "UNKNOWN SAP query %x, server %x", query_type, server_type));
} }
} }
@ -523,12 +523,12 @@ static void handle_diag(int fd, int ipx_pack_typ,
uint8 *exnodes = conf->ex_node; uint8 *exnodes = conf->ex_node;
while (j--) { while (j--) {
if IPXCMPNODE(exnodes, my_server_adr.node) { if IPXCMPNODE(exnodes, my_server_adr.node) {
DPRINTF(("NO RESPONSE TO DIAG\n")); XDPRINTF((2, 0, "NO RESPONSE TO DIAG"));
return; return;
} }
exnodes += IPX_NODE_SIZE; exnodes += IPX_NODE_SIZE;
} }
XDPRINTF((2,"DIAG Request, ipx_pack_typ %d, data_len %d, count %d\n", XDPRINTF((2,0,"DIAG Request, ipx_pack_typ %d, data_len %d, count %d",
(int)ipx_pack_typ, data_len, count)); (int)ipx_pack_typ, data_len, count));
response_ipx_diag(fd, ipx_pack_typ, from_addr); response_ipx_diag(fd, ipx_pack_typ, from_addr);
} }
@ -565,12 +565,12 @@ static void handle_event(int fd, uint16 socknr, int slot)
uderr.opt.buf = (char*)&err_pack_typ; /* get actual typ */ uderr.opt.buf = (char*)&err_pack_typ; /* get actual typ */
ud.addr.buf = (char*)&source_adr; ud.addr.buf = (char*)&source_adr;
t_rcvuderr(fd, &uderr); t_rcvuderr(fd, &uderr);
DPRINTF(("Error from %s, Code = 0x%lx\n", visable_ipx_adr(&erradr), uderr.error)); XDPRINTF((2, 0, "Error from %s, Code = 0x%lx", visable_ipx_adr(&erradr), uderr.error));
if (nw_debug) t_error("t_rcvudata !OK"); if (nw_debug) t_error("t_rcvudata !OK");
return; return;
} }
XDPRINTF((3,"Ptyp:%d from: %s\n", (int)ipx_pack_typ, visable_ipx_adr(&source_adr) )); XDPRINTF((3,0,"Ptyp:%d from: %s", (int)ipx_pack_typ, visable_ipx_adr(&source_adr) ));
if (server_down_stamp) return; /* no more interests */ if (server_down_stamp) return; /* no more interests */
@ -582,12 +582,12 @@ static void handle_event(int fd, uint16 socknr, int slot)
|| source_sock == sock_nummern[WDOG_SLOT] || source_sock == sock_nummern[WDOG_SLOT]
|| source_sock == SOCK_SAP || source_sock == SOCK_SAP
|| source_sock == SOCK_RIP) { || source_sock == SOCK_RIP) {
XDPRINTF((2,"OWN Packet from sock:0x%04x, ignored\n", source_sock)); XDPRINTF((2,0,"OWN Packet from sock:0x%04x, ignored", source_sock));
return; return;
} }
/* it also can be Packets from DOSEMU OR ncpfs on this machine */ /* it also can be Packets from DOSEMU OR ncpfs on this machine */
XDPRINTF((2,"Packet from OWN maschine:sock=0x%x\n", source_sock)); XDPRINTF((2,0,"Packet from OWN maschine:sock=0x%x", source_sock));
} }
switch (socknr) { switch (socknr) {
@ -597,7 +597,7 @@ static void handle_event(int fd, uint16 socknr, int slot)
default : default :
if (WDOG_SLOT == slot) { /* this is a watchdog packet */ if (WDOG_SLOT == slot) { /* this is a watchdog packet */
XDPRINTF((2,"WDOG Packet len=%d connid=%d, status=%d\n", XDPRINTF((2,0, "WDOG Packet len=%d connid=%d, status=%d",
(int)ud.udata.len, (int) ipx_data_buff.wdog.connid, (int)ud.udata.len, (int) ipx_data_buff.wdog.connid,
(int)ipx_data_buff.wdog.status)); (int)ipx_data_buff.wdog.status));
if (2 == ud.udata.len) { if (2 == ud.udata.len) {
@ -607,11 +607,11 @@ static void handle_event(int fd, uint16 socknr, int slot)
} else { } else {
uint8 *p = (uint8*)&ipx_data_buff; uint8 *p = (uint8*)&ipx_data_buff;
int k = 0; int k = 0;
DPRINTF(("UNKNOWN")); XDPRINTF((1, 2, "UNKNOWN"));
while (k++ < ud.udata.len){ while (k++ < ud.udata.len){
DPRINTF((" %x", (int) *p++)); XDPRINTF((1, 3, " %x", (int) *p++));
} }
DPRINTF(("\n")); XDPRINTF((1, 1, NULL));
/* /*
print_ud_data(&ud); print_ud_data(&ud);
*/ */
@ -727,7 +727,7 @@ static void get_ini(int full)
case IPX_FRAME_ETHERII : frname = "ETHERNET_II";break; case IPX_FRAME_ETHERII : frname = "ETHERNET_II";break;
default : break; default : break;
} /* switch */ } /* switch */
DPRINTF(("DEVICE=%s, FRAME=%s, NETWORK=0x%lx\n", XDPRINTF((1, 0, "DEVICE=%s, FRAME=%s, NETWORK=0x%lx",
nd->devname, frname, nd->net)); nd->devname, frname, nd->net));
init_dev(nd->devname, nd->frame, nd->net); init_dev(nd->devname, nd->frame, nd->net);
} }
@ -735,7 +735,7 @@ static void get_ini(int full)
if (!get_ipx_addr(&my_server_adr)) { if (!get_ipx_addr(&my_server_adr)) {
internal_net = GET_BE32(my_server_adr.net); internal_net = GET_BE32(my_server_adr.net);
} else exit(1); } else exit(1);
DPRINTF(("Servername='%s', INTERNAL NET=0x%lx, NODE=0x%02x:%02x:%02x:%02x:%02x:%02x\n", XDPRINTF((1, 0, "Servername='%s', INTERNAL NET=0x%lx, NODE=0x%02x:%02x:%02x:%02x:%02x:%02x",
my_nwname, internal_net, my_nwname, internal_net,
(int)my_server_adr.node[0], (int)my_server_adr.node[0],
(int)my_server_adr.node[1], (int)my_server_adr.node[1],
@ -780,7 +780,7 @@ static void close_all(void)
if (!save_ipx_routes) { if (!save_ipx_routes) {
for (j=0; j<anz_net_devices;j++) { for (j=0; j<anz_net_devices;j++) {
NW_NET_DEVICE *nd=net_devices[j]; NW_NET_DEVICE *nd=net_devices[j];
DPRINTF(("Close Device=%s, frame=%d\n", XDPRINTF((1, 0, "Close Device=%s, frame=%d",
nd->devname, nd->frame)); nd->devname, nd->frame));
exit_dev(nd->devname, nd->frame); exit_dev(nd->devname, nd->frame);
} }
@ -820,7 +820,7 @@ static void sig_quit(int rsig)
static void handle_hup_reqest(void) static void handle_hup_reqest(void)
{ {
get_ini_debug(NWSERV); get_ini_debug(NWSERV);
XDPRINTF((2, "NWSERV:Got HUP, reading ini.\n")); XDPRINTF((2,0, "Got HUP, reading ini."));
get_ini(0); get_ini(0);
write_to_ncpserv(0xeeee, 0, NULL, 0); /* inform ncpserv */ write_to_ncpserv(0xeeee, 0, NULL, 0); /* inform ncpserv */
fl_get_int=0; fl_get_int=0;
@ -891,12 +891,12 @@ int main(int argc, char **argv)
while (++j < NEEDED_POLLS) { while (++j < NEEDED_POLLS) {
if (p->revents){ if (p->revents){
if (j < NEEDED_SOCKETS) { /* socket */ if (j < NEEDED_SOCKETS) { /* socket */
XDPRINTF((99,"POLL %d, SOCKET %x, ", p->revents, sock_nummern[j])); XDPRINTF((99, 0,"POLL %d, SOCKET %x", p->revents, sock_nummern[j]));
if (p->revents & ~POLLIN) if (p->revents & ~POLLIN)
errorp(0, "STREAM error", "revents=0x%x", p->revents ); errorp(0, "STREAM error", "revents=0x%x", p->revents );
else handle_event(p->fd, sock_nummern[j], j); else handle_event(p->fd, sock_nummern[j], j);
} else { /* fd_ncpserv_in */ } else { /* fd_ncpserv_in */
XDPRINTF((2,"POLL %d, fh=%d\n", p->revents, p->fd)); XDPRINTF((2, 0, "POLL %d, fh=%d", p->revents, p->fd));
if (p->revents & ~POLLIN) if (p->revents & ~POLLIN)
errorp(0, "STREAM error", "revents=0x%x", p->revents ); errorp(0, "STREAM error", "revents=0x%x", p->revents );
else { else {
@ -907,7 +907,7 @@ int main(int argc, char **argv)
ipxAddr_t adr; ipxAddr_t adr;
if (sizeof(int) == read(fd_ncpserv_in, if (sizeof(int) == read(fd_ncpserv_in,
(char*)&what, sizeof(int))) { (char*)&what, sizeof(int))) {
XDPRINTF((2,"GOT ncpserv_in what=0x%x\n", what)); XDPRINTF((2, 0, "GOT ncpserv_in what=0x%x", what));
switch (what) { switch (what) {
case 0x2222 : /* insert wdog connection */ case 0x2222 : /* insert wdog connection */
if (sizeof(int) == read(fd_ncpserv_in, if (sizeof(int) == read(fd_ncpserv_in,
@ -955,7 +955,7 @@ int main(int argc, char **argv)
p++; p++;
} /* while */ } /* while */
} else { } else {
XDPRINTF((99,"POLLING ...\n")); XDPRINTF((99,0,"POLLING ..."));
} }
if (server_down_stamp) { if (server_down_stamp) {
if (akttime_stamp - server_down_stamp > server_goes_down_secs) break; if (akttime_stamp - server_down_stamp > server_goes_down_secs) break;

41
tools.c
View File

@ -1,4 +1,4 @@
/* tools.c 06-Dec-95 */ /* tools.c 24-Dec-95 */
/* (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
@ -23,6 +23,18 @@
int nw_debug=0; int nw_debug=0;
FILE *logfile=stdout; FILE *logfile=stdout;
static int in_module=0; /* in which process i am ? */
static char *modnames[] =
{ "???????",
"NWSERV ",
"NCPSERV",
"NWCONN " };
static char *get_modstr(void)
{
return(modnames[in_module]);
}
char *xmalloc(uint size) char *xmalloc(uint size)
{ {
char *p = (size) ? (char *)malloc(size) : (char*)NULL; char *p = (size) ? (char *)malloc(size) : (char*)NULL;
@ -63,20 +75,26 @@ void dprintf(char *p, ...)
{ {
va_list ap; va_list ap;
if (nw_debug){ if (nw_debug){
fprintf(logfile, "%s:", get_modstr());
va_start(ap, p); va_start(ap, p);
vfprintf(logfile, p, ap); vfprintf(logfile, p, ap);
va_end(ap); va_end(ap);
fprintf(logfile, "\n");
fflush(logfile); fflush(logfile);
} }
} }
void xdprintf(int dlevel, char *p, ...) void xdprintf(int dlevel, int mode, char *p, ...)
{ {
va_list ap; va_list ap;
if (nw_debug >= dlevel) { if (nw_debug >= dlevel) {
va_start(ap, p); if (!(mode & 1)) fprintf(logfile, "%s:", get_modstr());
vfprintf(logfile, p, ap); if (p) {
va_end(ap); va_start(ap, p);
vfprintf(logfile, p, ap);
va_end(ap);
}
if (!(mode & 2)) fprintf(logfile, "\n");
fflush(logfile); fflush(logfile);
} }
} }
@ -84,11 +102,11 @@ void xdprintf(int dlevel, char *p, ...)
void errorp(int mode, char *what, char *p, ...) void errorp(int mode, char *what, char *p, ...)
{ {
va_list ap; va_list ap;
int errnum = errno; int errnum = errno;
if (errnum >= 0 && errnum < _sys_nerr) if (errnum >= 0 && errnum < _sys_nerr)
fprintf(logfile, "%s:%s\n", what, _sys_errlist[errnum]); fprintf(logfile, "%s:%s:%s\n", get_modstr(), what, _sys_errlist[errnum]);
else else
fprintf(logfile, "%s:errno=%d\n", what, errnum); fprintf(logfile, "%s:%s:errno=%d\n", get_modstr(), what, errnum);
if (p) { if (p) {
va_start(ap, p); va_start(ap, p);
vfprintf(logfile, p, ap); vfprintf(logfile, p, ap);
@ -184,6 +202,7 @@ void init_tools(int module)
int withlog=0; int withlog=0;
int dodaemon=0; int dodaemon=0;
int new_log=0; int new_log=0;
in_module = module;
if (f) { if (f) {
int what; int what;
while (0 != (what=get_ini_entry(f, 0, buff, sizeof(buff)))) { /* daemonize */ while (0 != (what=get_ini_entry(f, 0, buff, sizeof(buff)))) { /* daemonize */
@ -214,6 +233,10 @@ void init_tools(int module)
} }
if (NWSERV == module) setsid(); if (NWSERV == module) setsid();
} }
if (NWSERV == module || NCPSERV == module) {
XDPRINTF((1, 0, "Starting Version: %d.%02dpl%d",
_VERS_H_, _VERS_L_, _VERS_P_ ));
}
} }
void exit_tools(int what) void exit_tools(int what)
@ -277,7 +300,7 @@ int get_fs_usage(char *path, struct fs_usage *fsp)
{ {
struct statfs fsd; struct statfs fsd;
if (statfs (path, &fsd) < 0) return (-1); if (statfs (path, &fsd) < 0) return (-1);
XDPRINTF((2, XDPRINTF((3, 0,
"blocks=%d, bfree=%d, bavail=%d, files=%d, ffree=%d, bsize=%d\n", "blocks=%d, bfree=%d, bavail=%d, files=%d, ffree=%d, bsize=%d\n",
fsd.f_blocks, fsd.f_bfree, fsd.f_bavail, fsd.f_blocks, fsd.f_bfree, fsd.f_bavail,
fsd.f_files, fsd.f_ffree, fsd.f_bsize)); fsd.f_files, fsd.f_ffree, fsd.f_bsize));

View File

@ -32,7 +32,7 @@ extern int x_x_xnewstr(uint8 **p, uint8 *s);
extern char *xmalloc(uint size); extern char *xmalloc(uint size);
extern int strmaxcpy(char *dest, char *source, int len); extern int strmaxcpy(char *dest, char *source, int len);
extern void dprintf(char *p, ...); extern void dprintf(char *p, ...);
extern void xdprintf(int dlevel, 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, ...);
extern FILE *open_nw_ini(void); extern FILE *open_nw_ini(void);
extern int get_ini_entry(FILE *f, int entry, char *str, int strsize); extern int get_ini_entry(FILE *f, int entry, char *str, int strsize);