mars_nwe-0.96.pl04
This commit is contained in:
parent
475b65b9b9
commit
c374994026
10
CHANGES
10
CHANGES
@ -44,5 +44,11 @@ Erste 'oeffentliche' Version
|
||||
- Noch einen Wildcard Fehler korrigiert. (James MacLean)
|
||||
- Debug Routine und Levels veraendert.
|
||||
- Packet Groesse > 546 Byte erlaubt.
|
||||
|
||||
|
||||
- MAX_NW_ROUTES ist nun in config.h.
|
||||
- nwroute.c build_rip_buff if condition richtig geklammert.
|
||||
- Code mittels cc -Wall etwas gesaeubert.
|
||||
- RIP Broadcast's werden nun ueber einen temporaeren socket
|
||||
geschrieben.
|
||||
- direkte Responses von ncpserv werden nun ueber einen
|
||||
temporaeren socket und nicht mehr ueber den NCP-Socket
|
||||
geschrieben.
|
||||
|
71
connect.h
Normal file
71
connect.h
Normal file
@ -0,0 +1,71 @@
|
||||
/* connect.h 08-Jan-96 */
|
||||
|
||||
typedef struct {
|
||||
int fd; /* von System bei Open bzw. Create */
|
||||
long offd; /* aktueller File Offset */
|
||||
time_t tmodi; /* modification TIME */
|
||||
char name[256]; /* UNIX Dateiname */
|
||||
} FILE_HANDLE;
|
||||
|
||||
typedef struct {
|
||||
DIR *f;
|
||||
char unixname[256]; /* kompletter unixname */
|
||||
ino_t inode; /* Unix Inode */
|
||||
time_t timestamp; /* f<>r letzte Allocierung */
|
||||
char *kpath; /* Ein Zeichen nach unixname */
|
||||
uint8 vol_options; /* Suchoptions */
|
||||
uint8 volume; /* Volume Number */
|
||||
} DIR_HANDLE;
|
||||
|
||||
typedef struct {
|
||||
uint8 *sysname; /* VOL_NAME */
|
||||
uint8 *unixname; /* UNIX-Verzeichnis */
|
||||
uint8 options; /* *_1_* alles in Kleinbuchstaben */
|
||||
} NW_VOL;
|
||||
|
||||
typedef struct {
|
||||
uint8 path[256]; /* directory */
|
||||
uint8 fn[256]; /* file */
|
||||
int volume; /* Volume Number */
|
||||
int has_wild; /* fn has wildcards */
|
||||
} NW_PATH;
|
||||
|
||||
typedef struct {
|
||||
ino_t inode; /* Unix Inode dieses Verzeichnisses */
|
||||
time_t timestamp; /* Zeitmarke */
|
||||
uint8 *path; /* path ab Volume */
|
||||
uint8 volume; /* Welches Volume */
|
||||
uint8 is_temp; /* 0:perm. 1:temp 2: spez. temp */
|
||||
uint8 drive; /* driveletter */
|
||||
uint8 task; /* actual task */
|
||||
} NW_DIR;
|
||||
|
||||
extern int conn_get_kpl_path(NW_PATH *nwpath, int dirhandle,
|
||||
uint8 *data, int len, int only_dir) ;
|
||||
|
||||
extern char *conn_get_nwpath_name(NW_PATH *p);
|
||||
|
||||
extern void set_default_guid(void);
|
||||
extern void set_guid(int gid, int uid);
|
||||
|
||||
|
||||
extern int nw_scan_a_directory(uint8 *rdata,
|
||||
int dirhandle,
|
||||
uint8 *data,
|
||||
int len,
|
||||
int searchattrib,
|
||||
uint32 searchbeg); /* 32 bit */
|
||||
|
||||
extern int nw_scan_a_root_dir(uint8 *rdata,
|
||||
int dirhandle);
|
||||
|
||||
|
||||
|
||||
/* queues */
|
||||
extern int nw_creat_queue(int connection, uint8 *queue_id, uint8 *queue_job,
|
||||
uint8 *dirname, int dir_nam_len, int old_call);
|
||||
|
||||
extern int nw_close_file_queue(uint8 *queue_id,
|
||||
uint8 *job_id,
|
||||
uint8 *prc, int prc_len);
|
||||
|
4
emutli.c
4
emutli.c
@ -1,4 +1,4 @@
|
||||
/* emutli.c 24-Dec-95 */
|
||||
/* emutli.c 08-Jan-96 */
|
||||
/*
|
||||
* One short try to emulate TLI with SOCKETS.
|
||||
*/
|
||||
@ -307,7 +307,6 @@ void ipx_route_add(uint32 dest_net,
|
||||
void ipx_route_del(uint32 net)
|
||||
{
|
||||
struct rtentry rd;
|
||||
int result;
|
||||
int sock;
|
||||
/* Router */
|
||||
struct sockaddr_ipx *sr = (struct sockaddr_ipx *)&rd.rt_gateway;
|
||||
@ -315,7 +314,6 @@ void ipx_route_del(uint32 net)
|
||||
struct sockaddr_ipx *st = (struct sockaddr_ipx *)&rd.rt_dst;
|
||||
rd.rt_flags = RTF_GATEWAY;
|
||||
st->sipx_network = htonl(net);
|
||||
|
||||
if ( (sock = socket(AF_IPX, SOCK_DGRAM, AF_IPX)) < 0){
|
||||
errorp(0, "EMUTLI:ipx_route_del", NULL);
|
||||
return;
|
||||
|
@ -1,12 +1,17 @@
|
||||
/* config.h: 10-Dec-95 */
|
||||
/* config.h: 03-Jan-96 */
|
||||
/* some of this config is needed by make, others by cc */
|
||||
#define FILENAME_NW_INI "/etc/nwserv.conf" /* full name of ini (conf) file */
|
||||
#define PATHNAME_PROGS "/sbin" /* path location of progs */
|
||||
#define PATHNAME_BINDERY "/etc" /* path location of bindery */
|
||||
|
||||
#define MAX_CONNECTIONS 5 /* max. Number of Connections */
|
||||
/* must be < 256 !!! */
|
||||
|
||||
#define MAX_NW_VOLS 10 /* max. Volumes */
|
||||
|
||||
#define MAX_NET_DEVICES 1 /* max. Netdevices, frames */
|
||||
#define IPX_DATA_GR_546 1 /* allow ipx packets > 546+30 Byte */
|
||||
|
||||
#define MAX_NW_ROUTES 50 /* max. networks (internal + external) */
|
||||
|
||||
|
||||
|
14
makefile.unx
14
makefile.unx
@ -1,4 +1,4 @@
|
||||
# makefile.unx 25-Dec-95
|
||||
# makefile.unx 09-Jan-96
|
||||
VPATH=..
|
||||
O=.o
|
||||
C=.c
|
||||
@ -6,7 +6,7 @@ C=.c
|
||||
DEBUG=-DDB
|
||||
V_H=0
|
||||
V_L=96
|
||||
P_L=2
|
||||
P_L=4
|
||||
#define D_P_L 1
|
||||
DISTRIB=mars_nwe
|
||||
#if D_P_L
|
||||
@ -87,7 +87,6 @@ M_PATHNAME_PROGS="."
|
||||
|
||||
OBJ1= $(EMUTLIOBJ) net1$(O) tools$(O)
|
||||
OBJ2= $(OBJ1) nwroute$(O)
|
||||
#nwdbm$(O)
|
||||
OBJ3= $(OBJ1) connect$(O) namspace$(O)
|
||||
OBJ4= $(OBJ1) nwdbm$(O) nwcrypt$(O)
|
||||
OBJ5= $(OBJ1)
|
||||
@ -95,6 +94,8 @@ OBJ5= $(OBJ1)
|
||||
OBJS= net1$(O) tools$(O) connect$(O) nwdbm$(O) \
|
||||
$(PROG2)$(O) $(PROG3)$(O) $(PROG4)$(O) $(PROG5)$(O)
|
||||
|
||||
HOBJ3= $(PROG3)$(O) connect$(O) namspace$(O)
|
||||
|
||||
$(PROG1): $(PROG1)$(O) $(OBJ1)
|
||||
$(CC) -o ../$(PROG1) $(PROG1)$(O) $(OBJ1) $(NSLLIB)
|
||||
|
||||
@ -112,7 +113,10 @@ $(PROG4): $(PROG4)$(O) $(OBJ4)
|
||||
$(PROG5): $(PROG5)$(O) $(OBJ5)
|
||||
$(CC) -o ../$(PROG5) $(PROG5)$(O) $(OBJ5) $(NSLLIB)
|
||||
|
||||
$(OBJS): net.h config.h
|
||||
$(PROG3)$(O): namspace.h connect.h
|
||||
connect$(O): namspace.h connect.h
|
||||
namspace$(O): namspace.h connect.h
|
||||
$(OBJS): net.h config.h
|
||||
|
||||
$(C)$(O):
|
||||
$(CC) -c $(CFLAGS) $(HOSTCFLAGS) $(DEBUG)\
|
||||
@ -173,6 +177,8 @@ n_make_dir: n_clean1
|
||||
$(DISTRIB).lsm \
|
||||
$(DISTRIB)/. \
|
||||
; rm -f $(DISTRIB)/config.h \
|
||||
; rm -f $(DISTRIB)/namspace.? \
|
||||
; cp old/namspace.? $(DISTRIB)/. \
|
||||
; ln -f \
|
||||
examples/$(STERN) \
|
||||
$(DISTRIB)/examples/. \
|
||||
|
@ -1,7 +1,7 @@
|
||||
Begin3
|
||||
Title: mars_nwe
|
||||
Version: 0.96
|
||||
Entered-date: 20-Dec-95
|
||||
Version: 0.96pl4
|
||||
Entered-date: 09-Jan-96
|
||||
Description: full novell-server-emulator (src),beta
|
||||
file-services, bindery-services, printing-services
|
||||
needs no kernelchanges, usefull for testing ipx
|
||||
@ -9,8 +9,8 @@ Keywords: novell, netware, server, ipx, ncp, tli
|
||||
Author: mstover@freeway.de (Martin Stover)
|
||||
Maintained-by: mstover@freeway.de (Martin Stover)
|
||||
Primary-site: linux01.gwdg.de /pub/ncpfs
|
||||
90kB mars_nwe-0.96.tgz
|
||||
100kB mars_nwe-0.96.pl4.tgz
|
||||
Alternate-site: ftp.uni-duisburg.de /pub/linux/ipxware
|
||||
Platforms: Linux (1.2.xx, 1.3.32 tested, others should work)
|
||||
Platforms: Linux (1.2.xx, 1.3.32, 1.3.55 tested, others should work)
|
||||
Copying-policy: GNU
|
||||
End
|
||||
|
91
namspace.c
91
namspace.c
@ -1,4 +1,4 @@
|
||||
/* namspace.c 26-Nov-95 : NameSpace Services, mars_nwe */
|
||||
/* namspace.c 08-Jan-96 : NameSpace Services, mars_nwe */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
@ -18,87 +18,10 @@
|
||||
*/
|
||||
|
||||
#include "net.h"
|
||||
#include <dirent.h>
|
||||
#include <utime.h>
|
||||
#include "connect.h"
|
||||
#include "namspace.h"
|
||||
|
||||
typedef struct {
|
||||
int x;
|
||||
|
||||
} DIR_BASE_ENTRY;
|
||||
|
||||
#define MAX_DIR_BASE 20
|
||||
|
||||
int nw_generate_dir_path(uint8 *nwpathstruct,
|
||||
uint8 *ns_dir_base, uint8 *dos_dir_base)
|
||||
/* returns Volume Number >=0 or errcode < 0 if error */
|
||||
{
|
||||
return(-0xfb); /* TODO: complete call */
|
||||
}
|
||||
|
||||
|
||||
int handle_func_0x57(uint8 *p, uint8 *responsedata)
|
||||
{
|
||||
int result = -0xfb; /* unknown request */
|
||||
int ufunc = (int) *p++; /* now p locates at 4 byte boundary */
|
||||
int namspace = (int) *p; /* for most calls */
|
||||
switch (ufunc) {
|
||||
case 0x02 : /* Initialize Search */
|
||||
{
|
||||
/* NW PATH STRUC */
|
||||
}
|
||||
break;
|
||||
case 0x07 : /* Modify File or Dir Info */
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x09 : /* Set short Dir Handle*/
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x15 : /* Get Path String from short dir neu*/
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x16 : /* Generate Dir BASE and VolNumber */
|
||||
{
|
||||
uint8 *nwpathstruct = p+3;
|
||||
struct OUTPUT {
|
||||
uint8 ns_dir_base[4]; /* BASEHANDLE */
|
||||
uint8 dos_dir_base[4]; /* BASEHANDLE */
|
||||
uint8 volume; /* Volumenumber*/
|
||||
} *xdata= (struct OUTPUT*)responsedata;
|
||||
result = nw_generate_dir_path(nwpathstruct,
|
||||
xdata->ns_dir_base, xdata->dos_dir_base);
|
||||
|
||||
if (result >-1) {
|
||||
xdata->volume = result;
|
||||
result = sizeof(struct OUTPUT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x0c : /* alloc short dir Handle */
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x1a : /* Get Huge NS Info new*/
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x1c : /* GetFullPathString new*/
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x1d : /* GetEffDirRights new */
|
||||
{
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
default : result = -0xfb; /* unknown request */
|
||||
} /* switch */
|
||||
return(result);
|
||||
}
|
||||
#if WITH_NAME_SPACE_CALLS
|
||||
#endif
|
||||
|
20
namspace.h
Normal file
20
namspace.h
Normal file
@ -0,0 +1,20 @@
|
||||
/* namspace.h 08-Jan-96 : NameSpace Services, mars_nwe */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define WITH_NAME_SPACE_CALLS 0
|
33
ncpserv.c
33
ncpserv.c
@ -1,5 +1,5 @@
|
||||
/* ncpserv.c, 24-Dec-95 */
|
||||
|
||||
/* ncpserv.c */
|
||||
#define REVISION_DATE "09-Jan-96"
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -126,7 +126,6 @@ static int anz_connect=0; /* actual anz connections */
|
||||
static int new_conn_nr(void)
|
||||
{
|
||||
int j = -1;
|
||||
int not_logged=-1;
|
||||
if (!anz_connect){ /* init all */
|
||||
j = MAX_CONNECTIONS;
|
||||
while (j--) {
|
||||
@ -293,8 +292,9 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
NCPRESPONSE *ncpresponse = (NCPRESPONSE*)&ipxoutdata;
|
||||
uint8 *responsedata = ((uint8*)&ipxoutdata)+sizeof(NCPRESPONSE);
|
||||
uint8 *requestdata = ((uint8*)ncprequest)+sizeof(NCPREQUEST);
|
||||
|
||||
#if 0
|
||||
uint8 len = *(requestdata+1);
|
||||
#endif
|
||||
uint8 ufunc = *(requestdata+2);
|
||||
uint8 *rdata = requestdata+3;
|
||||
uint8 completition = 0;
|
||||
@ -478,7 +478,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
if (!result) {
|
||||
c->object_id = obj.id; /* actuell Object ID */
|
||||
c->t_login = akttime; /* u. login Time */
|
||||
get_guid(rdata+2, rdata+2+sizeof(int), obj.id);
|
||||
get_guid((int*) (rdata+2), (int*) (rdata+2+sizeof(int)), obj.id);
|
||||
in_len=12 + 2*sizeof(int);
|
||||
return(-1); /* nwconn must do the rest */
|
||||
} else completition = (uint8) -result;
|
||||
@ -540,7 +540,7 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
if (result > -1) {
|
||||
c->object_id = obj.id; /* actuell Object */
|
||||
c->t_login = akttime; /* and login time */
|
||||
get_guid(rdata+2, rdata+2+sizeof(int), obj.id);
|
||||
get_guid((int*)(rdata+2), (int*)(rdata+2+sizeof(int)), obj.id);
|
||||
in_len=12 + 2*sizeof(int);
|
||||
return(-1); /* nwconn must do the rest */
|
||||
} else completition = (uint8) -result;
|
||||
@ -948,7 +948,6 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
|
||||
case 0x49 : { /* IS CALLING STATION A MANAGER */
|
||||
NETOBJ obj;
|
||||
int result;
|
||||
obj.id = GET_BE32(rdata);
|
||||
/* TODO !! */
|
||||
completition = 0; /* here allways Manager */
|
||||
@ -1061,10 +1060,10 @@ static int handle_fxx(CONNECTION *c, int gelen, int func)
|
||||
} break;
|
||||
|
||||
case 0xc9 : { /* GET FILE SERVER DESCRIPTION STRINGs */
|
||||
char *company = "Mars :-)";
|
||||
char *revision = "Version %d.%d";
|
||||
char *revision_date= "24-Dec-95";
|
||||
char *copyright = "(C)opyright Martin Stover";
|
||||
char *company = "Mars :-)";
|
||||
char *revision = "Version %d.%d";
|
||||
char *revision_date = REVISION_DATE;
|
||||
char *copyright = "(C)opyright Martin Stover";
|
||||
int k=strlen(company)+1;
|
||||
|
||||
memset(responsedata, 0, 512);
|
||||
@ -1163,11 +1162,11 @@ static void ncp_response(int type, int sequence,
|
||||
if (nw_debug){
|
||||
char comment[80];
|
||||
sprintf(comment, "NCP-RESP compl=0x%x ", completition);
|
||||
send_ipx_data(ncp_fd, 17, sizeof(NCPRESPONSE) + data_len,
|
||||
send_ipx_data(-1, 17, sizeof(NCPRESPONSE) + data_len,
|
||||
(char *) ncpresponse,
|
||||
&from_addr, comment);
|
||||
} else
|
||||
send_ipx_data(ncp_fd, 17, sizeof(NCPRESPONSE) + data_len,
|
||||
send_ipx_data(-1, 17, sizeof(NCPRESPONSE) + data_len,
|
||||
(char *) ncpresponse,
|
||||
&from_addr, NULL);
|
||||
}
|
||||
@ -1286,7 +1285,7 @@ static int handle_ctrl(void)
|
||||
data_len = read(0, (char*)&conn, sizeof(conn));
|
||||
if (sizeof(int) == data_len && conn == what)
|
||||
sent_down_message();
|
||||
break;
|
||||
break;
|
||||
|
||||
default : break;
|
||||
} /* switch */
|
||||
@ -1362,6 +1361,7 @@ int main(int argc, char *argv[])
|
||||
if (diff_time > 50) /* after max. 50 seconds */
|
||||
nwserv_reset_wdog(connection);
|
||||
/* tell the wdog there's no need to look */
|
||||
|
||||
if (ncprequest->sequence == c->sequence
|
||||
&& !c->retry++) {
|
||||
/* perhaps nwconn is busy */
|
||||
@ -1409,7 +1409,10 @@ int main(int argc, char *argv[])
|
||||
|
||||
ncp_response(0x3333, ncprequest->sequence,
|
||||
ncprequest->connection,
|
||||
0, 0xff, 0x08, 0);
|
||||
0,
|
||||
0xff, /* completition */
|
||||
0xff, /* conn status */
|
||||
0);
|
||||
|
||||
} else if (type == 0x1111) {
|
||||
/* GIVE CONNECTION Nr connection */
|
||||
|
16
net.h
16
net.h
@ -1,4 +1,4 @@
|
||||
/* net.h 02-Jan-96 */
|
||||
/* net.h 08-Jan-96 */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
@ -34,6 +34,7 @@
|
||||
#include "unistd.h"
|
||||
#include <sys/stat.h>
|
||||
#include <time.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
#ifndef LINUX
|
||||
# include "stropts.h"
|
||||
@ -107,6 +108,10 @@
|
||||
# define IPX_DATA_GR_546 1
|
||||
#endif
|
||||
|
||||
#ifndef MAX_NW_ROUTES
|
||||
# define MAX_NW_ROUTES 50
|
||||
#endif
|
||||
|
||||
#if IPX_DATA_GR_546
|
||||
# define IPX_MAX_DATA 1058
|
||||
#else
|
||||
@ -351,15 +356,6 @@ typedef struct {
|
||||
} QUEUE_PRINT_AREA;
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8 volume;
|
||||
uint8 base[4]; /* Base or Handle */
|
||||
uint8 flag; /* 0=base, 1=handle, 0xff=not path nor handle */
|
||||
uint8 components; /* nmbrs of pathes, components */
|
||||
uint8 pathes[1]; /* form len+name */
|
||||
} NW_HPATH;
|
||||
|
||||
|
||||
extern int nw_init_connect(void);
|
||||
extern int nw_free_handles(int task);
|
||||
|
||||
|
43
net1.c
43
net1.c
@ -1,4 +1,4 @@
|
||||
/* net1.c, 24-Dec-95 */
|
||||
/* net1.c, 09-Jan-96 */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
@ -138,13 +138,14 @@ void ipx_addr_to_adr(char *s, ipxAddr_t *p)
|
||||
}
|
||||
|
||||
|
||||
int send_ipx_data(int fd, int pack_typ,
|
||||
int send_ipx_data(int fdx, int pack_typ,
|
||||
int data_len, char *data,
|
||||
ipxAddr_t *to_addr, char *comment)
|
||||
{
|
||||
int fd=fdx;
|
||||
int result=0;
|
||||
struct t_unitdata ud;
|
||||
uint8 ipx_pack_typ = (uint8) pack_typ;
|
||||
|
||||
ud.opt.len = sizeof(ipx_pack_typ);
|
||||
ud.opt.maxlen = sizeof(ipx_pack_typ);
|
||||
ud.opt.buf = (char*)&ipx_pack_typ;
|
||||
@ -156,16 +157,32 @@ int send_ipx_data(int fd, int pack_typ,
|
||||
ud.addr.buf = (char*)to_addr;
|
||||
if (comment != NULL) XDPRINTF((2,0,"%s TO: ", comment));
|
||||
if (nw_debug > 1) print_ipx_addr(to_addr);
|
||||
if (t_sndudata(fd, &ud) < 0){
|
||||
if (nw_debug > 1) t_error("t_sndudata !OK");
|
||||
return(-1);
|
||||
if (fd < 0) {
|
||||
struct t_bind bind;
|
||||
ipxAddr_t addr;
|
||||
fd=t_open("/dev/ipx", O_RDWR, NULL);
|
||||
if (fd < 0) {
|
||||
t_error("t_open !Ok");
|
||||
return(-1);
|
||||
}
|
||||
memset(&addr,0, sizeof(ipxAddr_t));
|
||||
bind.addr.len = sizeof(ipxAddr_t);
|
||||
bind.addr.maxlen = sizeof(ipxAddr_t);
|
||||
bind.addr.buf = (char*)&addr;
|
||||
bind.qlen = 0; /* ever */
|
||||
if (t_bind(fd, &bind, &bind) < 0){
|
||||
t_error("t_bind in send_ipx_data");
|
||||
t_close(fd);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
return(0);
|
||||
if ((result=t_sndudata(fd, &ud)) < 0){
|
||||
if (nw_debug > 1) t_error("t_sndudata !OK");
|
||||
}
|
||||
if (fdx < 0 && fd > -1) {
|
||||
t_unbind(fd);
|
||||
t_close(fd);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
27
nwconn.c
27
nwconn.c
@ -1,4 +1,4 @@
|
||||
/* nwconn.c 02-Jan-96 */
|
||||
/* nwconn.c 09-Jan-96 */
|
||||
/* one process / connection */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
@ -19,6 +19,9 @@
|
||||
*/
|
||||
|
||||
#include "net.h"
|
||||
#include <dirent.h>
|
||||
#include "connect.h"
|
||||
#include "namspace.h"
|
||||
|
||||
static int father_pid = -1;
|
||||
static ipxAddr_t from_addr;
|
||||
@ -306,21 +309,25 @@ static void handle_ncp_serv()
|
||||
} else if (*p == 0xa){ /* legt Verzeichnis an */
|
||||
/******** Create Dir *********************/
|
||||
int dir_handle = (int) *(p+1);
|
||||
#if 0
|
||||
int rightmask = (int) *(p+2);
|
||||
#endif
|
||||
int pathlen = (int) *(p+3);
|
||||
uint8 *path = p+4;
|
||||
int code = nw_mk_rd_dir(dir_handle, path, pathlen, 1);
|
||||
if (code) completition = (uint8) -code;
|
||||
} else if (*p == 0xb){ /* l”scht Verzeichnis */
|
||||
} else if (*p == 0xb){ /* deletes dir */
|
||||
/******** Delete DIR *********************/
|
||||
int dir_handle = (int) *(p+1);
|
||||
#if 0
|
||||
int reserved = (int) *(p+2); /* Res. by NOVELL */
|
||||
#endif
|
||||
int pathlen = (int) *(p+3);
|
||||
uint8 *path = p+4;
|
||||
int code = nw_mk_rd_dir(dir_handle, path, pathlen, 0);
|
||||
if (code) completition = (uint8) -code;
|
||||
} else if (*p == 0xd){ /* Add Trustees to DIR */
|
||||
/******** GetDirektoryPATH ***************/
|
||||
/******** AddTrustesstoDir ***************/
|
||||
struct INPUT {
|
||||
uint8 header[7]; /* Requestheader */
|
||||
uint8 div[3]; /* 0x0, dlen, typ */
|
||||
@ -1195,11 +1202,13 @@ static void handle_ncp_serv()
|
||||
}
|
||||
break;
|
||||
|
||||
#if 0
|
||||
#if WITH_NAME_SPACE_CALLS
|
||||
case 0x57 : /* some new namespace calls */
|
||||
int result = handle_func_0x57(requestdata, responsedata);
|
||||
if (result > -1) data_len = result;
|
||||
else completition=(uint8)-result;
|
||||
{
|
||||
int result = handle_func_0x57(requestdata, responsedata);
|
||||
if (result > -1) data_len = result;
|
||||
else completition=(uint8)-result;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
@ -1288,7 +1297,6 @@ static void set_sig(void)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int completition = 0;
|
||||
if (argc != 4) {
|
||||
fprintf(stderr, "usage nwconn PID FROM_ADDR Connection\n");
|
||||
exit(1);
|
||||
@ -1299,7 +1307,8 @@ int main(int argc, char **argv)
|
||||
init_tools(NWCONN);
|
||||
|
||||
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);
|
||||
|
||||
|
@ -118,7 +118,7 @@ static buf32 encryptkeys =
|
||||
0x6B,0x0F,0xD5,0x70,0xAE,0xFB,0xAD,0x11,
|
||||
0xF4,0x47,0xDC,0xA7,0xEC,0xCF,0x50,0xC0};
|
||||
|
||||
|
||||
#include "nwcrypt.h"
|
||||
static void
|
||||
shuffle1(buf32 temp, unsigned char *target)
|
||||
{
|
||||
|
7
nwcrypt.h
Normal file
7
nwcrypt.h
Normal file
@ -0,0 +1,7 @@
|
||||
/* nwcrypt.h */
|
||||
extern void shuffle(unsigned char *lon,
|
||||
const unsigned char *buf, int buflen,
|
||||
unsigned char *target);
|
||||
|
||||
extern void nw_encrypt(unsigned char *fra,
|
||||
unsigned char *buf,unsigned char *til);
|
18
nwdbm.c
18
nwdbm.c
@ -1,4 +1,4 @@
|
||||
/* nwdbm.c 24-Dec-95 data base for mars_nwe */
|
||||
/* nwdbm.c 08-Jan-96 data base for mars_nwe */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -23,12 +23,14 @@
|
||||
|
||||
#include "net.h"
|
||||
#include "nwdbm.h"
|
||||
#include "nwcrypt.h"
|
||||
#ifdef LINUX
|
||||
# include <ndbm.h>
|
||||
#else
|
||||
# include </usr/ucbinclude/ndbm.h>
|
||||
#endif
|
||||
|
||||
|
||||
int tells_server_version=0;
|
||||
|
||||
static char *fnprop = "nwprop";
|
||||
@ -1062,7 +1064,7 @@ static void add_pr_queue(uint32 q_id,
|
||||
}
|
||||
|
||||
|
||||
static uint32 add_user(uint32 u_id, uint32 g_id,
|
||||
static void add_user(uint32 u_id, uint32 g_id,
|
||||
char *name, char *unname, char *password)
|
||||
{
|
||||
uint8 buff[4];
|
||||
@ -1089,17 +1091,17 @@ static uint32 add_user(uint32 u_id, uint32 g_id,
|
||||
void nw_fill_standard(char *servername, ipxAddr_t *adr)
|
||||
/* fills the Standardproperties */
|
||||
{
|
||||
char serverna[50];
|
||||
uint8 buff[12];
|
||||
char serverna[MAX_SERVER_NAME+2];
|
||||
uint32 su_id = 0x00000001;
|
||||
uint32 ge_id = 0x01000001;
|
||||
|
||||
uint32 guest_id = 0x02000001;
|
||||
uint32 serv_id = 0x03000001;
|
||||
uint32 q1_id = 0x0E000001;
|
||||
#if 0
|
||||
uint32 guest_id = 0x02000001;
|
||||
uint32 nbo_id = 0x0B000001;
|
||||
uint32 ngr_id = 0x0C000001;
|
||||
uint32 ps1_id = 0x0D000001;
|
||||
uint32 q1_id = 0x0E000001;
|
||||
#endif
|
||||
FILE *f = open_nw_ini();
|
||||
ge_id =
|
||||
nw_new_create_prop(ge_id, "EVERYONE", 0x2, 0x0, 0x31,
|
||||
@ -1162,7 +1164,7 @@ void nw_fill_standard(char *servername, ipxAddr_t *adr)
|
||||
fclose(f);
|
||||
}
|
||||
if (servername && adr) {
|
||||
strmaxcpy(serverna, servername, 48);
|
||||
strmaxcpy(serverna, servername, MAX_SERVER_NAME);
|
||||
upstr(serverna);
|
||||
nw_new_create_prop(serv_id, serverna, 0x4, O_FL_DYNA, 0x40,
|
||||
"NET_ADDRESS", P_FL_ITEM | P_FL_DYNA, 0x40,
|
||||
|
8
nwdbm.h
8
nwdbm.h
@ -1,4 +1,4 @@
|
||||
/* nwdbm.h 11-Sep-95 */
|
||||
/* nwdbm.h 08-Jan-96 */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -168,6 +168,12 @@ extern uint32 nw_new_create_prop(uint32 wanted_id,
|
||||
char *propname, int propflags, int propsecurity,
|
||||
char *value, int valuesize);
|
||||
|
||||
extern int get_guid(int *gid, int *uid, uint32 obj_id);
|
||||
|
||||
extern int nw_test_passwd(uint32 obj_id, uint8 *vgl_key, uint8 *akt_key);
|
||||
extern int nw_get_q_dirname(uint32 q_id, uint8 *buff);
|
||||
extern int nw_get_q_prcommand(uint32 q_id, uint8 *buff);
|
||||
|
||||
extern void nw_fill_standard(char *servername, ipxAddr_t *adr);
|
||||
extern void nw_init_dbm(char *servername, ipxAddr_t *adr);
|
||||
|
||||
|
20
nwroute.c
20
nwroute.c
@ -1,4 +1,4 @@
|
||||
/* nwroute.c 24-Dec-95 */
|
||||
/* nwroute.c 08-Jan-96 */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -19,7 +19,6 @@
|
||||
#include "net.h"
|
||||
#include "nwserv.h"
|
||||
|
||||
#define MAX_NW_ROUTES 50 /* max. 1 complete RIP packet should be enough */
|
||||
|
||||
typedef struct {
|
||||
uint32 net; /* destnet */
|
||||
@ -65,7 +64,10 @@ static void insert_delete_net(uint32 destnet,
|
||||
if (k == anz_routes) { /* no route slot found */
|
||||
if (do_delete) return; /* nothing to delete */
|
||||
if (freeslot < 0) {
|
||||
if (anz_routes == MAX_NW_ROUTES) return;
|
||||
if (anz_routes == MAX_NW_ROUTES) {
|
||||
XDPRINTF((1, 0, "too many routes=%d, increase MAX_NW_ROUTES in config.h", anz_routes));
|
||||
return;
|
||||
}
|
||||
nw_routes[k] = (NW_ROUTES*)xmalloc(sizeof(NW_ROUTES));
|
||||
anz_routes++;
|
||||
} else k=freeslot;
|
||||
@ -153,7 +155,7 @@ static void build_rip_buff(uint32 destnet)
|
||||
k=-1;
|
||||
while (++k < anz_routes) {
|
||||
NW_ROUTES *nr=nw_routes[k];
|
||||
if ((is_wild || nr->net == destnet) && rmode==1 || nr->hops < 2)
|
||||
if ( (is_wild || nr->net == destnet) && (rmode==1 || nr->hops < 2) )
|
||||
ins_rip_buff(nr->net, (rmode==1) ? 16 : nr->hops, nr->ticks);
|
||||
}
|
||||
}
|
||||
@ -178,7 +180,9 @@ static void send_rip_buff(ipxAddr_t *from_addr)
|
||||
(operation==1) ? "Request" : "Response", rentries));
|
||||
p+=2;
|
||||
while (rentries--) {
|
||||
#if 0
|
||||
uint32 net = GET_BE32(p);
|
||||
#endif
|
||||
uint16 hops = GET_BE16(p+4);
|
||||
uint16 ticks = GET_BE16(p+6);
|
||||
XDPRINTF((2,0, "hops=%3d, ticks %3d, network:%02x.%02x.%02x.%02x",
|
||||
@ -298,7 +302,13 @@ void send_sap_broadcast(int mode)
|
||||
U16_TO_BE16(1, ipx_data.sip.intermediate_networks);
|
||||
/* I hope 1 is ok here */
|
||||
}
|
||||
send_ipx_data(sockfd[MY_BROADCAST_SLOT], 0,
|
||||
|
||||
#ifdef MY_BROADCAST_SLOT
|
||||
send_ipx_data(sockfd[MY_BROADCAST_SLOT],
|
||||
#else
|
||||
send_ipx_data(-1,
|
||||
#endif
|
||||
0,
|
||||
sizeof(ipx_data.sip),
|
||||
(char *)&(ipx_data.sip),
|
||||
&wild, "SIP Broadcast");
|
||||
|
19
nwserv.c
19
nwserv.c
@ -1,4 +1,4 @@
|
||||
/* nwserv.c 20-Dec-95 */
|
||||
/* nwserv.c 09-Jan-96 */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -27,8 +27,13 @@ char my_nwname[50]; /* Name of this server */
|
||||
int anz_net_devices=0;
|
||||
NW_NET_DEVICE *net_devices[MAX_NET_DEVICES];
|
||||
|
||||
uint16 ipx_sock_nummern[]={ 0, /* auto sock */
|
||||
uint16 ipx_sock_nummern[]={
|
||||
#ifdef MY_BROADCAST_SLOT
|
||||
0, /* auto sock */
|
||||
#endif
|
||||
#ifdef WDOG_SLOT
|
||||
0, /* auto sock */
|
||||
#endif
|
||||
SOCK_SAP,
|
||||
SOCK_RIP,
|
||||
SOCK_ROUTE,
|
||||
@ -578,8 +583,12 @@ static void handle_event(int fd, uint16 socknr, int slot)
|
||||
IPXCMPNET (source_adr.net, my_server_adr.net)) {
|
||||
|
||||
int source_sock = (int) GET_BE16(source_adr.sock);
|
||||
|
||||
#if 0
|
||||
if ( source_sock == sock_nummern[MY_BROADCAST_SLOT]
|
||||
|| source_sock == sock_nummern[WDOG_SLOT]
|
||||
#endif
|
||||
|
||||
if ( source_sock == sock_nummern[WDOG_SLOT]
|
||||
|| source_sock == SOCK_SAP
|
||||
|| source_sock == SOCK_RIP) {
|
||||
XDPRINTF((2,0,"OWN Packet from sock:0x%04x, ignored", source_sock));
|
||||
@ -639,8 +648,8 @@ static void get_ini(int full)
|
||||
char inhalt4[500];
|
||||
char dummy;
|
||||
int anz;
|
||||
if ((anz=sscanf((char*)buff, "%s %s %s", inhalt, inhalt2,
|
||||
inhalt3, inhalt4)) > 0) {
|
||||
if ((anz=sscanf((char*)buff, "%s %s %s %s", inhalt, inhalt2,
|
||||
inhalt3, inhalt4)) > 0) {
|
||||
switch (what) {
|
||||
case 2 : if (full) {
|
||||
strncpy(my_nwname, inhalt, 48);
|
||||
|
22
nwserv.h
22
nwserv.h
@ -1,4 +1,4 @@
|
||||
/* nwserv.h 09-Dec-95 */
|
||||
/* nwserv.h 09-Jan-96 */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -33,16 +33,18 @@ extern int anz_net_devices;
|
||||
extern NW_NET_DEVICE *net_devices[];
|
||||
|
||||
/* <======== SOCKETS =========> */
|
||||
#define MY_BROADCAST_SLOT 0 /* Server Broadcast OUT */
|
||||
#define WDOG_SLOT 1 /* Watchdog send + recv */
|
||||
|
||||
#define SAP_SLOT 2
|
||||
#define RIP_SLOT 3
|
||||
#define ROUTE_SLOT 4
|
||||
#define DIAG_SLOT 5
|
||||
#if 0
|
||||
#define ECHO_SLOT 6
|
||||
#define ERR_SLOT 7
|
||||
#define MY_BROADCAST_SLOT 0 /* Server Broadcast OUT */
|
||||
#endif
|
||||
|
||||
#define WDOG_SLOT 0 /* Watchdog send + recv */
|
||||
#define SAP_SLOT 1
|
||||
#define RIP_SLOT (SAP_SLOT +1)
|
||||
#define ROUTE_SLOT (RIP_SLOT +1)
|
||||
#define DIAG_SLOT (ROUTE_SLOT +1)
|
||||
#if 0
|
||||
#define ECHO_SLOT (DIAG_SLOT +1)
|
||||
#define ERR_SLOT (ECHO_SLOT +1)
|
||||
#endif
|
||||
|
||||
extern int sockfd[];
|
||||
|
11
tools.c
11
tools.c
@ -1,4 +1,4 @@
|
||||
/* tools.c 24-Dec-95 */
|
||||
/* tools.c 07-Jan-96 */
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
@ -45,6 +45,13 @@ char *xmalloc(uint size)
|
||||
return(p);
|
||||
}
|
||||
|
||||
char *xcmalloc(uint size)
|
||||
{
|
||||
char *p = xmalloc(size);
|
||||
if (size) memset(p, 0, size);
|
||||
return(p);
|
||||
}
|
||||
|
||||
void x_x_xfree(char **p)
|
||||
{
|
||||
if (*p != (char *)NULL){
|
||||
@ -301,7 +308,7 @@ int get_fs_usage(char *path, struct fs_usage *fsp)
|
||||
struct statfs fsd;
|
||||
if (statfs (path, &fsd) < 0) return (-1);
|
||||
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",
|
||||
fsd.f_blocks, fsd.f_bfree, fsd.f_bavail,
|
||||
fsd.f_files, fsd.f_ffree, fsd.f_bsize));
|
||||
#define convert_blocks(b) adjust_blocks ((b), fsd.f_bsize, 512)
|
||||
|
3
tools.h
3
tools.h
@ -1,4 +1,4 @@
|
||||
/* tools.h : 14-Nov-95 */
|
||||
/* tools.h : 07-Jan-96 */
|
||||
|
||||
/* (C)opyright (C) 1993,1995 Martin Stover, Marburg, Germany
|
||||
*
|
||||
@ -30,6 +30,7 @@ extern int x_x_xnewstr(uint8 **p, uint8 *s);
|
||||
#define new_str(p, s) x_x_xnewstr((uint8 **)&(p), s)
|
||||
|
||||
extern char *xmalloc(uint size);
|
||||
extern char *xcmalloc(uint size);
|
||||
extern int strmaxcpy(char *dest, char *source, int len);
|
||||
extern void dprintf(char *p, ...);
|
||||
extern void xdprintf(int dlevel, int mode, char *p, ...);
|
||||
|
Loading…
Reference in New Issue
Block a user