Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5753870858 | ||
|
|
b8ce93c8bd |
BIN
.downloads/ncpfs-0.15.tgz
Normal file
BIN
.downloads/ncpfs-0.15.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.16.tgz
Normal file
BIN
.downloads/ncpfs-0.16.tgz
Normal file
Binary file not shown.
20
BUGS
20
BUGS
@@ -5,12 +5,12 @@ But there are really problems that might be fixed in the future.
|
|||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
'df' returns 0:
|
'df' returns 0: Free disk space is distributed among the volumes in
|
||||||
Free disk space is distributed among the volumes in NetWare. df is
|
NetWare. df is only able to report one number per mounted
|
||||||
only able to report one number per mounted filesystem. As connections
|
filesystem. As connections are quite expensive for NetWare (with
|
||||||
are quite expensive for NetWare (with lwared that might change ...), I
|
mars_nwe and lwared that might change ...), I rejected the alternative
|
||||||
rejected the alternative to mount only a single volume for a unix
|
to mount only a single volume for a unix mount point. So I simply
|
||||||
mount point. So I simply return 0.
|
return 0.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -20,11 +20,3 @@ like
|
|||||||
Nov 25 16:09:08 lx01 kernel: alloc_skb called nonatomically from interrupt 0000002e
|
Nov 25 16:09:08 lx01 kernel: alloc_skb called nonatomically from interrupt 0000002e
|
||||||
|
|
||||||
These are a bit annoying, but completely harmless.
|
These are a bit annoying, but completely harmless.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
ncpfs has a problem with NetWare 4.1, when files are created. I think
|
|
||||||
NW4.1 does not like some of the creation mode bits. If somebody with
|
|
||||||
access to a NW4.1 server could compile the kernel module for 1.2 with
|
|
||||||
-DDEBUG_NCP=2, and send me the syslog output gzipped/uuencoded, I
|
|
||||||
might find out more about that problem.
|
|
||||||
|
|||||||
17
Changes
17
Changes
@@ -1,6 +1,23 @@
|
|||||||
I only began this file with ncpfs-0.12. If you're interested in older
|
I only began this file with ncpfs-0.12. If you're interested in older
|
||||||
versions, you can find them on linux01.gwdg.de:/pub/ncpfs/old.
|
versions, you can find them on linux01.gwdg.de:/pub/ncpfs/old.
|
||||||
|
|
||||||
|
ncpfs-0.15 -> ncpfs-0.16
|
||||||
|
|
||||||
|
- Included ipx-1.0, made available by Greg Page <greg@caldera.com>,
|
||||||
|
Caldera
|
||||||
|
- Made -n work for password-less accounts. Thanks to Alexander Jolk
|
||||||
|
<jolk@ap-pc513b.physik.uni-karlsruhe.de>.
|
||||||
|
- Fixed the kerneld support.
|
||||||
|
- Fixed the NetWare 4.1 problem. Many thanks to
|
||||||
|
Chatchai JANTARAPRIM <chat@ratree.psu.ac.th> and
|
||||||
|
hitesh.soneji@industry.net for their patience.
|
||||||
|
|
||||||
|
ncpfs-0.14 -> ncpfs-0.15
|
||||||
|
|
||||||
|
- A bug fixed that made normal mounting impossible. It was too late
|
||||||
|
yesterday. Sorry
|
||||||
|
- Manpage for pserver.c
|
||||||
|
|
||||||
ncpfs-0.13 -> ncpfs-0.14
|
ncpfs-0.13 -> ncpfs-0.14
|
||||||
|
|
||||||
- Improvements of manual pages by B. Galliart <bgallia@luc.edu> and
|
- Improvements of manual pages by B. Galliart <bgallia@luc.edu> and
|
||||||
|
|||||||
11
Makefile
11
Makefile
@@ -2,13 +2,12 @@
|
|||||||
# Makefile for the linux ncp-filesystem routines.
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
#
|
#
|
||||||
|
|
||||||
# KERNEL = 1.2
|
VERSION = 0.16
|
||||||
|
|
||||||
TOPDIR = $(shell pwd)
|
TOPDIR = $(shell pwd)
|
||||||
|
|
||||||
BINDIR = /usr/local/bin
|
BINDIR = /usr/local/bin
|
||||||
INTERM_BINDIR = $(TOPDIR)/bin
|
INTERM_BINDIR = $(TOPDIR)/bin
|
||||||
SUBDIRS = util ipx-0.75 man
|
SUBDIRS = util ipx-1.0 man
|
||||||
|
|
||||||
#
|
#
|
||||||
# The following 2 lines are for those who use Kernel version 1.2.x.
|
# The following 2 lines are for those who use Kernel version 1.2.x.
|
||||||
@@ -23,7 +22,7 @@ SUBDIRS = util ipx-0.75 man
|
|||||||
# uncomment this (kerneld is in linux since about 1.3.57):
|
# uncomment this (kerneld is in linux since about 1.3.57):
|
||||||
# KERNELD = -DHAVE_KERNELD
|
# KERNELD = -DHAVE_KERNELD
|
||||||
|
|
||||||
export INCLUDES BINDIR INTERM_BINDIR KERNELD
|
export INCLUDES BINDIR INTERM_BINDIR KERNELD VERSION
|
||||||
|
|
||||||
all:
|
all:
|
||||||
for i in $(SUBDIRS); do make -C $$i; done
|
for i in $(SUBDIRS); do make -C $$i; done
|
||||||
@@ -41,7 +40,7 @@ clean:
|
|||||||
rm -f `find . -type f -name '*.out' -print`
|
rm -f `find . -type f -name '*.out' -print`
|
||||||
for i in $(SUBDIRS); do make -C $$i clean; done
|
for i in $(SUBDIRS); do make -C $$i clean; done
|
||||||
|
|
||||||
realclean: clean
|
mrproper: clean
|
||||||
rm -fr $(INTERM_BINDIR)/* ncpfs.tgz
|
rm -fr $(INTERM_BINDIR)/* ncpfs.tgz
|
||||||
make -C util realclean
|
make -C util realclean
|
||||||
|
|
||||||
@@ -55,7 +54,7 @@ dist: tgz
|
|||||||
make dep
|
make dep
|
||||||
make all
|
make all
|
||||||
|
|
||||||
tgz: realclean
|
tgz: mrproper
|
||||||
(cd ..; \
|
(cd ..; \
|
||||||
tar cvf - $(SRCDIR) | \
|
tar cvf - $(SRCDIR) | \
|
||||||
gzip -9 > $(DISTFILE); \
|
gzip -9 > $(DISTFILE); \
|
||||||
|
|||||||
3
README
3
README
@@ -1,6 +1,7 @@
|
|||||||
This is ncpfs, a free NetWare client filesystem for Linux. Besides
|
This is ncpfs, a free NetWare client filesystem for Linux. Besides
|
||||||
some little utilities it also contains nprint, which enables you to
|
some little utilities it also contains nprint, which enables you to
|
||||||
print on NetWare print queues.
|
print on NetWare print queues. The opposite side, pserver, is also
|
||||||
|
provided.
|
||||||
|
|
||||||
INSTALLATION
|
INSTALLATION
|
||||||
|
|
||||||
|
|||||||
9
ipx-1.0/COPYING
Normal file
9
ipx-1.0/COPYING
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the original work is
|
||||||
|
properly attributed to Greg Page and Caldera, Inc.
|
||||||
|
Neither the name of Greg Page nor Caldera, Inc. may be used to
|
||||||
|
endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
This software is provided by Greg Page and Caldera, Inc. "AS IS"
|
||||||
|
and without any express or implied warranties.
|
||||||
|
|
||||||
24
ipx-1.0/Gregs.Makefile
Normal file
24
ipx-1.0/Gregs.Makefile
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
CFLAGS = -O2 -Wall
|
||||||
|
UTILS = ipx_configure ipx_interface ipx_internal_net ipx_route
|
||||||
|
all: $(UTILS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(UTILS) *.o rip sap ipxrcv ipxsend
|
||||||
|
|
||||||
|
install: $(UTILS)
|
||||||
|
for i in $(UTILS); \
|
||||||
|
do \
|
||||||
|
install --strip $$i /sbin; \
|
||||||
|
install $$i.8 /usr/man/man8; \
|
||||||
|
done
|
||||||
|
install init.ipx /etc/rc.d/init.d/ipx
|
||||||
|
install -m 0644 config.ipx /etc/sysconfig/ipx
|
||||||
|
rm -f /etc/rc.d/rc2.d/S15ipx
|
||||||
|
ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc2.d/S15ipx
|
||||||
|
rm -f /etc/rc.d/rc3.d/S15ipx
|
||||||
|
ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc3.d/S15ipx
|
||||||
|
rm -f /etc/rc.d/rc5.d/S15ipx
|
||||||
|
ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc5.d/S15ipx
|
||||||
|
rm -f /etc/rc.d/rc6.d/K55ipx
|
||||||
|
ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc6.d/K55ipx
|
||||||
|
|
||||||
@@ -5,16 +5,16 @@ UTILS = $(INTERM_BINDIR)/ipx_configure $(INTERM_BINDIR)/ipx_interface \
|
|||||||
all: $(UTILS)
|
all: $(UTILS)
|
||||||
|
|
||||||
$(INTERM_BINDIR)/ipx_configure: ipx_configure.o
|
$(INTERM_BINDIR)/ipx_configure: ipx_configure.o
|
||||||
$(CC) -s -o $(INTERM_BINDIR)/ipx_configure ipx_configure.o
|
$(CC) -o $(INTERM_BINDIR)/ipx_configure ipx_configure.o
|
||||||
|
|
||||||
$(INTERM_BINDIR)/ipx_interface: ipx_interface.o
|
$(INTERM_BINDIR)/ipx_interface: ipx_interface.o
|
||||||
$(CC) -s -o $(INTERM_BINDIR)/ipx_interface ipx_interface.o
|
$(CC) -o $(INTERM_BINDIR)/ipx_interface ipx_interface.o
|
||||||
|
|
||||||
$(INTERM_BINDIR)/ipx_internal_net: ipx_internal_net.o
|
$(INTERM_BINDIR)/ipx_internal_net: ipx_internal_net.o
|
||||||
$(CC) -s -o $(INTERM_BINDIR)/ipx_internal_net ipx_internal_net.o
|
$(CC) -o $(INTERM_BINDIR)/ipx_internal_net ipx_internal_net.o
|
||||||
|
|
||||||
$(INTERM_BINDIR)/ipx_route: ipx_route.o
|
$(INTERM_BINDIR)/ipx_route: ipx_route.o
|
||||||
$(CC) -s -o $(INTERM_BINDIR)/ipx_route ipx_route.o
|
$(CC) -o $(INTERM_BINDIR)/ipx_route ipx_route.o
|
||||||
|
|
||||||
dep:
|
dep:
|
||||||
$(CPP) -M $(INCLUDES) *.c > .depend
|
$(CPP) -M $(INCLUDES) *.c > .depend
|
||||||
@@ -25,6 +25,6 @@ clean:
|
|||||||
install: $(UTILS)
|
install: $(UTILS)
|
||||||
for i in $(UTILS); \
|
for i in $(UTILS); \
|
||||||
do \
|
do \
|
||||||
install --strip $$i $(BINDIR); \
|
install $$i $(BINDIR); \
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ This program is used to read/write two configuration parameters:
|
|||||||
|
|
||||||
By default, these are both turned off.
|
By default, these are both turned off.
|
||||||
|
|
||||||
The following are sample IPX programs:
|
The following are sample IPX programs (found in directory Samples):
|
||||||
|
|
||||||
ipxrcv.c and ipxsend.c
|
ipxrcv.c and ipxsend.c
|
||||||
ipxsend will send a single packet to an instance of ipxrcv running on the
|
ipxsend will send a single packet to an instance of ipxrcv running on the
|
||||||
@@ -51,7 +51,7 @@ main(int argc, char **argv)
|
|||||||
htonl(sipx.sipx_network),
|
htonl(sipx.sipx_network),
|
||||||
sipx.sipx_node[0], sipx.sipx_node[1],
|
sipx.sipx_node[0], sipx.sipx_node[1],
|
||||||
sipx.sipx_node[2], sipx.sipx_node[3],
|
sipx.sipx_node[2], sipx.sipx_node[3],
|
||||||
sipx.sipx_node[4], sipx.sipx_node[5]);
|
sipx.sipx_node[6], sipx.sipx_node[5]);
|
||||||
bptr += 2;
|
bptr += 2;
|
||||||
rp = (struct rip_data *) bptr;
|
rp = (struct rip_data *) bptr;
|
||||||
while (result >= sizeof(struct rip_data)) {
|
while (result >= sizeof(struct rip_data)) {
|
||||||
7
ipx-1.0/config.ipx
Normal file
7
ipx-1.0/config.ipx
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
IPX_AUTO_PRIMARY=on
|
||||||
|
IPX_AUTO_INTERFACE=on
|
||||||
|
IPX_CONFIGURED=no
|
||||||
|
IPX_DEVICE=eth0
|
||||||
|
IPX_FRAME=802.2
|
||||||
|
IPX_INTERNAL_NET=no
|
||||||
|
IPX_NETNUM=0
|
||||||
41
ipx-1.0/init.ipx
Normal file
41
ipx-1.0/init.ipx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# ipx Bring up/down IPX networking
|
||||||
|
#
|
||||||
|
|
||||||
|
# Source function library.
|
||||||
|
. /etc/rc.d/init.d/functions
|
||||||
|
|
||||||
|
. /etc/sysconfig/network
|
||||||
|
. /etc/sysconfig/ipx
|
||||||
|
|
||||||
|
# Check that networking is up.
|
||||||
|
[ ${NETWORKING} = "no" ] && exit 0
|
||||||
|
|
||||||
|
# See how we were called.
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
if [ ${IPX_CONFIGURED} = "yes" ]; then
|
||||||
|
if [ ${IPX_INTERNAL_NET} = "yes" ]; then
|
||||||
|
/sbin/ipx_internal_net add ${IPX_NETNUM}
|
||||||
|
else
|
||||||
|
/sbin/ipx_interface add -p ${IPX_DEVICE} \
|
||||||
|
${IPX_FRAME} ${IPX_NETNUM}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ipx_configure \
|
||||||
|
--auto_primary=${IPX_AUTO_PRIMARY} \
|
||||||
|
--auto_interface=${IPX_AUTO_INTERFACE}
|
||||||
|
touch /var/lock/subsys/ipx
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
ipx_configure --auto_primary=off --auto_interface=off
|
||||||
|
ipx_interface delall
|
||||||
|
rm -f /var/lock/subsys/ipx
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: network {start|stop}"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* See file COPYING for details.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* See file COPYING for details.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@@ -19,7 +24,8 @@ usage(void)
|
|||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s add [-p] device frame_type [net_number]\n\
|
fprintf(stderr, "Usage: %s add [-p] device frame_type [net_number]\n\
|
||||||
Usage: %s del device frame_type\n\
|
Usage: %s del device frame_type\n\
|
||||||
Usage: %s check device frame_type\n", progname, progname, progname);
|
Usage: %s delall\n\
|
||||||
|
Usage: %s check device frame_type\n", progname, progname, progname, progname);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,6 +34,9 @@ struct frame_type {
|
|||||||
unsigned char ft_val;
|
unsigned char ft_val;
|
||||||
} frame_types[] = {
|
} frame_types[] = {
|
||||||
{"802.2", IPX_FRAME_8022},
|
{"802.2", IPX_FRAME_8022},
|
||||||
|
#ifdef IPX_FRAME_TR_8022
|
||||||
|
{"802.2TR", IPX_FRAME_TR_8022},
|
||||||
|
#endif
|
||||||
{"802.3", IPX_FRAME_8023},
|
{"802.3", IPX_FRAME_8023},
|
||||||
{"SNAP", IPX_FRAME_SNAP},
|
{"SNAP", IPX_FRAME_SNAP},
|
||||||
{"EtherII", IPX_FRAME_ETHERII}
|
{"EtherII", IPX_FRAME_ETHERII}
|
||||||
@@ -162,6 +171,76 @@ ipx_add_interface(int argc, char **argv)
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ipx_delall_interface(int argc, char **argv)
|
||||||
|
{
|
||||||
|
struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)&id.ifr_addr;
|
||||||
|
int s;
|
||||||
|
int result;
|
||||||
|
char errmsg[80];
|
||||||
|
char buffer[80];
|
||||||
|
char device[20];
|
||||||
|
char frame_type[20];
|
||||||
|
int fti;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
||||||
|
if (s < 0) {
|
||||||
|
sprintf(errmsg, "%s: socket", progname);
|
||||||
|
perror(errmsg);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fp = fopen("/proc/net/ipx_interface", "r");
|
||||||
|
if (fp == NULL) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: Unable to open \"/proc/net/ipx_interface.\"\n",
|
||||||
|
progname);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fgets(buffer, 80, fp);
|
||||||
|
while (fscanf(fp, "%s %s %s %s %s", buffer, buffer, buffer,
|
||||||
|
device, frame_type) == 5) {
|
||||||
|
|
||||||
|
sipx->sipx_network = 0L;
|
||||||
|
if (strcasecmp(device, "Internal") == 0) {
|
||||||
|
sipx->sipx_special = IPX_INTERNAL;
|
||||||
|
} else {
|
||||||
|
sipx->sipx_special = IPX_SPECIAL_NONE;
|
||||||
|
strcpy(id.ifr_name, device);
|
||||||
|
fti = lookup_frame_type(frame_type);
|
||||||
|
if (fti < 0) continue;
|
||||||
|
sipx->sipx_type = frame_types[fti].ft_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
sipx->sipx_action = IPX_DLTITF;
|
||||||
|
sipx->sipx_family = AF_IPX;
|
||||||
|
result = ioctl(s, SIOCSIFADDR, &id);
|
||||||
|
if (result == 0) continue;
|
||||||
|
switch (errno) {
|
||||||
|
case EPROTONOSUPPORT:
|
||||||
|
fprintf(stderr, "%s: Invalid frame type (%s).\n",
|
||||||
|
progname, frame_type);
|
||||||
|
break;
|
||||||
|
case ENODEV:
|
||||||
|
fprintf(stderr, "%s: No such device (%s).\n",
|
||||||
|
progname, device);
|
||||||
|
break;
|
||||||
|
case EINVAL:
|
||||||
|
fprintf(stderr, "%s: No such IPX interface %s %s.\n",
|
||||||
|
progname, device, frame_type);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sprintf(errmsg, "%s: ioctl", progname);
|
||||||
|
perror(errmsg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ipx_del_interface(int argc, char **argv)
|
ipx_del_interface(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@@ -176,6 +255,7 @@ ipx_del_interface(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sipx->sipx_network = 0L;
|
sipx->sipx_network = 0L;
|
||||||
|
sipx->sipx_special = IPX_SPECIAL_NONE;
|
||||||
strcpy(id.ifr_name, argv[1]);
|
strcpy(id.ifr_name, argv[1]);
|
||||||
fti = lookup_frame_type(argv[2]);
|
fti = lookup_frame_type(argv[2]);
|
||||||
if (fti < 0)
|
if (fti < 0)
|
||||||
@@ -289,6 +369,10 @@ main(int argc, char **argv)
|
|||||||
for (i = 1; i < (argc-1); i++)
|
for (i = 1; i < (argc-1); i++)
|
||||||
argv[i] = argv[i+1];
|
argv[i] = argv[i+1];
|
||||||
ipx_add_interface(argc-1, argv);
|
ipx_add_interface(argc-1, argv);
|
||||||
|
} else if (strncasecmp(argv[1], "delall", 6) == 0) {
|
||||||
|
for (i = 1; i < (argc-1); i++)
|
||||||
|
argv[i] = argv[i+1];
|
||||||
|
ipx_delall_interface(argc-1, argv);
|
||||||
} else if (strncasecmp(argv[1], "del", 3) == 0) {
|
} else if (strncasecmp(argv[1], "del", 3) == 0) {
|
||||||
for (i = 1; i < (argc-1); i++)
|
for (i = 1; i < (argc-1); i++)
|
||||||
argv[i] = argv[i+1];
|
argv[i] = argv[i+1];
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* See file COPYING for details.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* See file COPYING for details.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
CFLAGS = -Wall -Wstrict-prototypes -O2 -DMODULE -fomit-frame-pointer \
|
CFLAGS = -Wall -Wstrict-prototypes -O2 -DMODULE -fomit-frame-pointer \
|
||||||
$(INCLUDES) \
|
$(INCLUDES) -DNCPFS_VERSION=\"$(VERSION)\"\
|
||||||
# -DDEBUG_NCP=1 -DDEBUG_NCP_MALLOC
|
# -DDEBUG_NCP=1 -DDEBUG_NCP_MALLOC
|
||||||
# -DDEBUG_NCP_MALLOC
|
# -DDEBUG_NCP_MALLOC
|
||||||
|
|
||||||
|
|||||||
@@ -797,7 +797,8 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
|
|
||||||
if (ncp_open_create_file_or_subdir(NCP_SERVER(dir),
|
if (ncp_open_create_file_or_subdir(NCP_SERVER(dir),
|
||||||
NCP_ISTRUCT(dir), _name,
|
NCP_ISTRUCT(dir), _name,
|
||||||
OC_MODE_CREATE|OC_MODE_OPEN,
|
OC_MODE_CREATE|OC_MODE_OPEN|
|
||||||
|
OC_MODE_REPLACE,
|
||||||
0, AR_READ|AR_WRITE,
|
0, AR_READ|AR_WRITE,
|
||||||
&finfo) != 0)
|
&finfo) != 0)
|
||||||
{
|
{
|
||||||
@@ -895,7 +896,7 @@ ncp_rmdir(struct inode *dir, const char *name, int len)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error = -EINVAL;
|
error = -EACCES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iput(dir);
|
iput(dir);
|
||||||
@@ -932,7 +933,7 @@ ncp_unlink(struct inode *dir, const char *name, int len)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error = -EINVAL;
|
error = -EACCES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iput(dir);
|
iput(dir);
|
||||||
|
|||||||
@@ -510,6 +510,7 @@ init_module( void)
|
|||||||
|
|
||||||
ncp_init_dir_cache();
|
ncp_init_dir_cache();
|
||||||
register_filesystem(&ncp_fs_type);
|
register_filesystem(&ncp_fs_type);
|
||||||
|
printk("ncpfs version %s loaded\n", NCPFS_VERSION);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -417,12 +417,18 @@ ncp_open_create_file_or_subdir(struct ncp_server *server,
|
|||||||
struct nw_file_info *target)
|
struct nw_file_info *target)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
__u16 search_attribs = 0x0006;
|
||||||
|
|
||||||
|
if ((create_attributes & aDIR) != 0)
|
||||||
|
{
|
||||||
|
search_attribs |= 0x8000;
|
||||||
|
}
|
||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 1); /* subfunction */
|
ncp_add_byte(server, 1); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, 0); /* dos name space */
|
||||||
ncp_add_byte(server, open_create_mode);
|
ncp_add_byte(server, open_create_mode);
|
||||||
ncp_add_word(server, 0x8006);
|
ncp_add_word(server, search_attribs);
|
||||||
ncp_add_dword(server, RIM_ALL);
|
ncp_add_dword(server, RIM_ALL);
|
||||||
ncp_add_dword(server, create_attributes);
|
ncp_add_dword(server, create_attributes);
|
||||||
/* The desired acc rights seem to be the inherited rights mask
|
/* The desired acc rights seem to be the inherited rights mask
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.TH IPX_CONFIGURE 8 "IPX Utilities" "Caldera, Inc."
|
.TH IPX_CONFIGURE 8 "IPX Utilities" "Caldera, Inc."
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ipx_configure \- display/configure IPX behavior
|
ipx_configure \- query/configure IPX behavior
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B ipx_configure
|
.B ipx_configure
|
||||||
[\-\-help]
|
[\-\-help]
|
||||||
@@ -8,7 +8,7 @@ ipx_configure \- display/configure IPX behavior
|
|||||||
[\-\-auto_primary=[on|off]]
|
[\-\-auto_primary=[on|off]]
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B ipx_configure
|
.B ipx_configure
|
||||||
displays or configures IPX behavior with respect to automatic IPX
|
queries or configures IPX behavior with respect to automatic IPX
|
||||||
interface detection. IPX can be configured to automatically create
|
interface detection. IPX can be configured to automatically create
|
||||||
interfaces as they are detected. It can also be configured to
|
interfaces as they are detected. It can also be configured to
|
||||||
automatically select a primary interface when none is explicitly
|
automatically select a primary interface when none is explicitly
|
||||||
@@ -23,20 +23,15 @@ arguments is described in the section
|
|||||||
.SS OPTIONS
|
.SS OPTIONS
|
||||||
.TP
|
.TP
|
||||||
.I "\-\-auto_interface=[on|off]"
|
.I "\-\-auto_interface=[on|off]"
|
||||||
This argument enables or disables the feature that will automatically detect
|
This argument either turns on or off the behavior of automatically creating
|
||||||
whether IPX is use on a network interface. If
|
interfaces.
|
||||||
.B on
|
|
||||||
and IPX packets are seen on an interface that interface will be automatically
|
|
||||||
flagged as an IPX interface. The default setting is
|
|
||||||
.B off.
|
|
||||||
.TP
|
.TP
|
||||||
.I "\-\-auto_primary=[on|off]"
|
.I "\-\-auto_primary=[on|off]"
|
||||||
This argument enables or disables the feature that will automatically select
|
This argument either turns on or off the behavior of automatically selecting
|
||||||
which IPX interface will be the primary IPX interface. The default setting is
|
a primary interface.
|
||||||
.B off.
|
|
||||||
.TP
|
.TP
|
||||||
.I "\-\-help"
|
.I "\-\-help"
|
||||||
Displays summarised usage instructions.
|
Print out information about utility.
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.I /proc/net/ipx_interface
|
.I /proc/net/ipx_interface
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.TH IPX_INTERFACE 8 "IPX Utilities" "Caldera, Inc."
|
.TH IPX_INTERFACE 8 "IPX Utilities" "Caldera, Inc."
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ipx_interface \- add, delete, or display IPX interface configuration.
|
ipx_interface \- add, delete, or display an IPX interface
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B ipx_interface
|
.B ipx_interface
|
||||||
add [-p] device frame_type [network number]
|
add [-p] device frame_type [network number]
|
||||||
@@ -9,17 +9,20 @@ add [-p] device frame_type [network number]
|
|||||||
del device frame_type
|
del device frame_type
|
||||||
.LP
|
.LP
|
||||||
.B ipx_interface
|
.B ipx_interface
|
||||||
|
delall
|
||||||
|
.LP
|
||||||
|
.B ipx_interface
|
||||||
check device frame_type
|
check device frame_type
|
||||||
.LP
|
.LP
|
||||||
.B ipx_interface
|
.B ipx_interface
|
||||||
help
|
help
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B ipx_interface
|
.B ipx_interface
|
||||||
adds, deletes, or displays the configuration of the specified IPX interface.
|
adds, deletes, or displays IPX interfaces depending on the option selected.
|
||||||
.P
|
.P
|
||||||
An IPX interface is the item to which IPX sockets are bound.
|
An IPX interface is the item to which IPX sockets are bound.
|
||||||
An IPX interface has an associated IPX Network Number, a physical device
|
An IPX interface corresponds to an IPX Network Number which corresponds
|
||||||
and frame type. A sample IPX Interface might look like:
|
to a physical device and frame type. A sample IPX Interface would be:
|
||||||
.LP
|
.LP
|
||||||
Network Number: 0x00ABCDEF
|
Network Number: 0x00ABCDEF
|
||||||
.LP
|
.LP
|
||||||
@@ -35,21 +38,25 @@ or default interface.
|
|||||||
.I add
|
.I add
|
||||||
This option is used to create an IPX interface. If the
|
This option is used to create an IPX interface. If the
|
||||||
.B -p
|
.B -p
|
||||||
flag is used, the interface is flagged as the
|
flag is used, the interface is made
|
||||||
.B PRIMARY
|
.B
|
||||||
interface. The IPX network number may optionally be specified. If it is not
|
PRIMARY.
|
||||||
specified it is set to 0 which indicates it should be automatically detected
|
The network number can be optionally assigned. If it is not assigned, it
|
||||||
by analysis of the existing IPX traffic on the network.
|
is set to 0 which indicates it should be detected from the traffic on the
|
||||||
|
network.
|
||||||
.TP
|
.TP
|
||||||
.I del
|
.I del
|
||||||
This option is used to delete an IPX interface.
|
This option is used to delete an IPX interface.
|
||||||
.TP
|
.TP
|
||||||
|
.I delall
|
||||||
|
This option is used to delete all IPX interfaces.
|
||||||
|
.TP
|
||||||
.I check
|
.I check
|
||||||
This option is used to display the network number associated with a specified
|
This option is used to display the device, frame type, and network number
|
||||||
device and frame type combination.
|
of an IPX interface.
|
||||||
.TP
|
.TP
|
||||||
.I help
|
.I help
|
||||||
This option displays summarised usage instructions.
|
This option displays information about the utility.
|
||||||
.SH FILES
|
.SH FILES
|
||||||
.I /proc/net/ipx_interface /proc/net/ipx_route
|
.I /proc/net/ipx_interface /proc/net/ipx_route
|
||||||
.SH BUGS
|
.SH BUGS
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.TH IPX_ROUTE 8 "IPX Utilities" "Caldera, Inc."
|
.TH IPX_ROUTE 8 "IPX Utilities" "Caldera, Inc."
|
||||||
.SH NAME
|
.SH NAME
|
||||||
ipx_route \- add or delete an IPX route.
|
ipx_route \- add or delete IPX route
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B ipx_route
|
.B ipx_route
|
||||||
add target_network router_network router_node
|
add target_network router_network router_node
|
||||||
@@ -10,11 +10,11 @@ del target_network
|
|||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.B ipx_route
|
.B ipx_route
|
||||||
adds or deletes an IPX route.
|
adds or deletes an IPX route.
|
||||||
The kernel IPX software stores only one route to any target network.
|
The kernel IPX stores only one route per target network at a time.
|
||||||
.SS OPTIONS
|
.SS OPTIONS
|
||||||
.TP
|
.TP
|
||||||
.I add
|
.I add
|
||||||
This option is used to configure a route to a target network.
|
This option is used to set up the route to a target network.
|
||||||
.TP
|
.TP
|
||||||
.I del
|
.I del
|
||||||
This option is used to delete the route to a target network.
|
This option is used to delete the route to a target network.
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ ncpmount \- mount all volumes of a specified Novell fileserver.
|
|||||||
] [
|
] [
|
||||||
.B -d
|
.B -d
|
||||||
.I dir mode
|
.I dir mode
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
]
|
]
|
||||||
mount-point
|
mount-point
|
||||||
|
|
||||||
@@ -186,6 +188,11 @@ can very well choose a file mode that tells that you have. This
|
|||||||
certainly cannot override the restrictions imposed by the server.
|
certainly cannot override the restrictions imposed by the server.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
Print ncpfs version number
|
||||||
|
.RE
|
||||||
|
|
||||||
.SH NOTES
|
.SH NOTES
|
||||||
You must configure the IPX subsystem before ncpmount will work.
|
You must configure the IPX subsystem before ncpmount will work.
|
||||||
It is especially important that there is a route to the internal network
|
It is especially important that there is a route to the internal network
|
||||||
|
|||||||
142
man/pserver.1
Normal file
142
man/pserver.1
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
.TH PSERVER 1 02/10/1996 pserver pserver
|
||||||
|
.SH NAME
|
||||||
|
pserver \- NetWare print server
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B pserver
|
||||||
|
[
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -q
|
||||||
|
.I queue name
|
||||||
|
] [
|
||||||
|
.B -c
|
||||||
|
.I command
|
||||||
|
] [
|
||||||
|
.B -j
|
||||||
|
.I job type
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I timeout
|
||||||
|
] [
|
||||||
|
.B -d
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B pserver
|
||||||
|
is a program that connects to print queues on NetWare servers and
|
||||||
|
feeds incoming print jobs to the Linux printing system.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
.B server
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the print server name at the server.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for the print server at the server. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, pserver
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if the print server does not require a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -C
|
||||||
|
.RS 3
|
||||||
|
By default, passwords are converted to uppercase before they are sent
|
||||||
|
to the server, because most servers require this. You can turn off
|
||||||
|
this conversion by
|
||||||
|
.B -C.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -q
|
||||||
|
.I queue name
|
||||||
|
.RS 3
|
||||||
|
.B queue name
|
||||||
|
is the name of the print queue you want to service.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -c
|
||||||
|
.I command
|
||||||
|
.RS 3
|
||||||
|
When a job is received from the print queue, pserver forks off a new
|
||||||
|
process, and feeds the job file to stdin.
|
||||||
|
.I command
|
||||||
|
is the printing command that is executed for each job. The default
|
||||||
|
command is 'lpr'.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -j
|
||||||
|
.I job type
|
||||||
|
.RS 3
|
||||||
|
Each job in a NetWare print queue has a job type. For print jobs, this
|
||||||
|
corresponds to the number of the form the job should be printed
|
||||||
|
on. You can tell pserver that it should only receive jobs for one
|
||||||
|
specific form from the queue. The default is -1, which means that
|
||||||
|
everything is received.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I timeout
|
||||||
|
.RS 3
|
||||||
|
Pserver is not informed by NetWare servers when new jobs arrive. So a
|
||||||
|
polling scheme has to be used. When there are no jobs to service,
|
||||||
|
.I timeout
|
||||||
|
tells pserver how long to wait between two requests. The default is 30
|
||||||
|
seconds. When a job is finished, pserver asks the NetWare server
|
||||||
|
immediately for a new job, and does not wait
|
||||||
|
.I timeout
|
||||||
|
seconds.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -d
|
||||||
|
.RS 3
|
||||||
|
Normally, pserver daemonizes itself.
|
||||||
|
.B -d
|
||||||
|
tells it not to do so. This is useful if you want to see the
|
||||||
|
diagnostic messages that are printed when a error occurs.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
|
||||||
|
.SH SEE ALSO
|
||||||
|
.B nwclient(5), slist(1), pqlist(1), ncpmount(8), ncpumount(8)
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
pserver was written by Volker Lendecke (lendecke@namu01.gwdg.de)
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Begin3
|
|
||||||
Title: ncpfs
|
|
||||||
Version: 0.14
|
|
||||||
Entered-date: 09. February 1996
|
|
||||||
Description: With ncpfs you can mount volumes of your novell
|
|
||||||
server under Linux. You need kernel 1.2.x or
|
|
||||||
1.3.54 and above. ncpfs does NOT work with any 1.3.x
|
|
||||||
kernel below 1.3.54.
|
|
||||||
Keywords: filesystem kernel ncp novell netware
|
|
||||||
Author: lendecke@namu01.gwdg.de (Volker Lendecke)
|
|
||||||
Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke)
|
|
||||||
Primary-site: linux01.gwdg.de:/pub/ncpfs
|
|
||||||
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/
|
|
||||||
~70k ncpfs-0.14.tgz
|
|
||||||
~ 1k ncpfs-0.14.lsm
|
|
||||||
Copying-policy: GPL
|
|
||||||
End
|
|
||||||
19
ncpfs-0.16.lsm
Normal file
19
ncpfs-0.16.lsm
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Begin3
|
||||||
|
Title: ncpfs
|
||||||
|
Version: 0.16
|
||||||
|
Entered-date: 21. February 1996
|
||||||
|
Description: With ncpfs you can mount volumes of your netware
|
||||||
|
server under Linux. You can also print to netware
|
||||||
|
print queues and spool netware print queues to the
|
||||||
|
Linux printing system. You need kernel 1.2.x or
|
||||||
|
1.3.54 and above. ncpfs does NOT work with any 1.3.x
|
||||||
|
kernel below 1.3.54.
|
||||||
|
Keywords: filesystem ncp novell netware printing
|
||||||
|
Author: lendecke@namu01.gwdg.de (Volker Lendecke)
|
||||||
|
Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke)
|
||||||
|
Primary-site: linux01.gwdg.de:/pub/ncpfs
|
||||||
|
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/
|
||||||
|
~73k ncpfs-0.16.tgz
|
||||||
|
~ 1k ncpfs-0.16.lsm
|
||||||
|
Copying-policy: GPL
|
||||||
|
End
|
||||||
@@ -6,8 +6,8 @@ UTIL_EXECS = ncpmount ncpumount nprint slist pqlist fsinfo pserver
|
|||||||
UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS))
|
UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS))
|
||||||
UIDUTILS = ncpmount ncpumount
|
UIDUTILS = ncpmount ncpumount
|
||||||
|
|
||||||
# CFLAGS = -Wall $(INCLUDES) -O2 $(KERNELD)
|
#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\"
|
||||||
CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2
|
CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 -DNCPFS_VERSION=\"$(VERSION)\"
|
||||||
CC = gcc
|
CC = gcc
|
||||||
|
|
||||||
all: $(UTILS) ncptest
|
all: $(UTILS) ncptest
|
||||||
|
|||||||
112
util/ncplib.c
112
util/ncplib.c
@@ -1201,6 +1201,7 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
|||||||
|
|
||||||
str_upper(spec.server);
|
str_upper(spec.server);
|
||||||
str_upper(spec.user);
|
str_upper(spec.user);
|
||||||
|
spec.login_type = NCP_BINDERY_USER;
|
||||||
|
|
||||||
if (ncp_open_permanent(&conn, &spec) == 0)
|
if (ncp_open_permanent(&conn, &spec) == 0)
|
||||||
{
|
{
|
||||||
@@ -1236,35 +1237,36 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
|||||||
}
|
}
|
||||||
fclose(nwc);
|
fclose(nwc);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (strlen(spec.user) == 0)
|
|
||||||
|
if (strlen(spec.user) == 0)
|
||||||
|
{
|
||||||
|
return &spec;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(spec.password) == 0)
|
||||||
|
{
|
||||||
|
char *password;
|
||||||
|
if (!(isatty(0) && isatty(1)))
|
||||||
{
|
{
|
||||||
return &spec;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
printf("Logging into %s as %s\n",
|
||||||
|
spec.server, spec.user);
|
||||||
|
|
||||||
if (strlen(spec.password) == 0)
|
password = getpass("Password: ");
|
||||||
|
if (strlen(password) > sizeof(spec.password))
|
||||||
{
|
{
|
||||||
char *password;
|
return NULL;
|
||||||
if (!(isatty(0) && isatty(1)))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
printf("Logging into %s as %s\n",
|
|
||||||
spec.server, spec.user);
|
|
||||||
|
|
||||||
password = getpass("Password: ");
|
|
||||||
if (strlen(password) > sizeof(spec.password))
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
strcpy(spec.password, password);
|
|
||||||
}
|
}
|
||||||
else
|
strcpy(spec.password, password);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (strcmp(spec.password, NWC_NOPASSWORD) == 0)
|
||||||
{
|
{
|
||||||
if (strcmp(spec.password, NWC_NOPASSWORD) == 0)
|
*spec.password = '\0';
|
||||||
{
|
|
||||||
*spec.password = '\0';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1348,6 +1350,7 @@ ncp_initialize_as(struct ncp_conn *conn,
|
|||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
password = NWC_NOPASSWORD;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
@@ -2738,3 +2741,68 @@ ncp_write(struct ncp_conn *conn, const char *file_id,
|
|||||||
}
|
}
|
||||||
return already_written;
|
return already_written;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_get_broadcast_message(struct ncp_conn *conn, char message[256])
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
int length;
|
||||||
|
|
||||||
|
ncp_init_request_s(conn, 1);
|
||||||
|
|
||||||
|
if ((result = ncp_request(conn, 21)) != 0)
|
||||||
|
{
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
length = ncp_reply_byte(conn, 0);
|
||||||
|
message[length] = 0;
|
||||||
|
memcpy(message, ncp_reply_data(conn, 1), length);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_dealloc_dir_handle(struct ncp_conn *conn, __u8 dir_handle)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
ncp_init_request_s(conn, 20);
|
||||||
|
ncp_add_byte(conn, dir_handle);
|
||||||
|
|
||||||
|
if ((result = ncp_request(conn, 22)) != 0)
|
||||||
|
{
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir,
|
||||||
|
word alloc_mode,
|
||||||
|
byte *target)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
ncp_init_request(conn);
|
||||||
|
ncp_add_byte(conn, 12); /* subfunction */
|
||||||
|
ncp_add_byte(conn, 0); /* dos name space */
|
||||||
|
ncp_add_byte(conn, 0); /* reserved */
|
||||||
|
ncp_add_word(conn, htons(alloc_mode));
|
||||||
|
ncp_add_handle_path(conn, dir->volNumber, dir->DosDirNum,
|
||||||
|
1, NULL);
|
||||||
|
|
||||||
|
if ((result = ncp_request(conn, 87)) != 0)
|
||||||
|
{
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
*target = ncp_reply_byte(conn, 0);
|
||||||
|
ncp_unlock_conn(conn);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -328,4 +328,20 @@ int
|
|||||||
ncp_abort_servicing_job(struct ncp_conn *conn, __u32 queue_id,
|
ncp_abort_servicing_job(struct ncp_conn *conn, __u32 queue_id,
|
||||||
__u32 job_number);
|
__u32 job_number);
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_get_broadcast_message(struct ncp_conn *conn, char message[256]);
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_dealloc_dir_handle(struct ncp_conn *conn, __u8 dir_handle);
|
||||||
|
|
||||||
|
#define NCP_ALLOC_PERMANENT (0x0000)
|
||||||
|
#define NCP_ALLOC_TEMPORARY (0x0001)
|
||||||
|
#define NCP_ALLOC_SPECIAL (0x0002)
|
||||||
|
|
||||||
|
int
|
||||||
|
ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir,
|
||||||
|
__u16 alloc_mode,
|
||||||
|
__u8 *target);
|
||||||
|
|
||||||
#endif /* _NCPLIB_H */
|
#endif /* _NCPLIB_H */
|
||||||
|
|||||||
@@ -191,10 +191,11 @@ main(int argc, char *argv[])
|
|||||||
umask(um);
|
umask(um);
|
||||||
data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & ~um;
|
data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & ~um;
|
||||||
data.dir_mode = 0;
|
data.dir_mode = 0;
|
||||||
|
data.flags |= NCP_MOUNT_SOFT;
|
||||||
|
|
||||||
upcase_password = 1;
|
upcase_password = 1;
|
||||||
|
|
||||||
while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nh")) != EOF)
|
while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nhv")) != EOF)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
@@ -290,6 +291,9 @@ main(int argc, char *argv[])
|
|||||||
case 'h':
|
case 'h':
|
||||||
help();
|
help();
|
||||||
exit(1);
|
exit(1);
|
||||||
|
case 'v':
|
||||||
|
fprintf(stderr, "ncpfs version %s\n", NCPFS_VERSION);
|
||||||
|
exit(1);
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
return -1;
|
return -1;
|
||||||
@@ -330,7 +334,7 @@ main(int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_KERNEL
|
#ifndef HAVE_KERNELD
|
||||||
/* Check if the ncpfs filesystem is in the kernel. If not, attempt
|
/* Check if the ncpfs filesystem is in the kernel. If not, attempt
|
||||||
* to load the ncpfs module */
|
* to load the ncpfs module */
|
||||||
if (load_ncpfs() != 0)
|
if (load_ncpfs() != 0)
|
||||||
@@ -423,6 +427,31 @@ main(int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NCP_MOUNT_VERSION>1
|
||||||
|
|
||||||
|
data.message_fd = socket(AF_IPX, SOCK_DGRAM, PF_IPX);
|
||||||
|
if (data.message_fd == -1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "could not open message socket: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
addr.sipx_port = htons(ntohs(addr.sipx_port) + 1);
|
||||||
|
|
||||||
|
if (bind(data.message_fd, (struct sockaddr *)&addr,sizeof(addr)) == -1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "bind(message_sock, ): %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(mount_point) < sizeof(data.mount_point))
|
||||||
|
{
|
||||||
|
strcpy(data.mount_point, mount_point);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
flags = MS_MGC_VAL;
|
flags = MS_MGC_VAL;
|
||||||
|
|
||||||
data.time_out = 20;
|
data.time_out = 20;
|
||||||
@@ -518,5 +547,6 @@ help(void)
|
|||||||
" If neither -P nor -n are given, you are\n"
|
" If neither -P nor -n are given, you are\n"
|
||||||
" asked for a password.\n"
|
" asked for a password.\n"
|
||||||
"-h print this help text\n"
|
"-h print this help text\n"
|
||||||
|
"-v print ncpfs version number\n"
|
||||||
"\n");
|
"\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,6 +147,47 @@ test_connlist(struct ncp_conn *conn)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_create(struct ncp_conn *conn)
|
||||||
|
{
|
||||||
|
struct nw_info_struct sys;
|
||||||
|
struct nw_info_struct me;
|
||||||
|
__u8 dir_handle;
|
||||||
|
struct ncp_file_info new_file;
|
||||||
|
|
||||||
|
if (ncp_do_lookup(conn, NULL, "SYS", &sys) != 0)
|
||||||
|
{
|
||||||
|
printf("lookup error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ncp_do_lookup(conn, &sys, "ME", &me) != 0)
|
||||||
|
{
|
||||||
|
printf("lookup public error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_alloc_short_dir_handle(conn, &me, NCP_ALLOC_TEMPORARY,
|
||||||
|
&dir_handle) != 0)
|
||||||
|
{
|
||||||
|
printf("alloc_dir_handle error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_create_file(conn, dir_handle, "BLUB.TXT", 0,
|
||||||
|
&new_file) != 0)
|
||||||
|
{
|
||||||
|
printf("create error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_dealloc_dir_handle(conn, dir_handle) != 0)
|
||||||
|
{
|
||||||
|
printf("dealloc error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@@ -158,7 +199,7 @@ main(int argc, char *argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
test_connlist(&conn);
|
test_create(&conn);
|
||||||
ncp_close(&conn);
|
ncp_close(&conn);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ static void
|
|||||||
help(void)
|
help(void)
|
||||||
{
|
{
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("usage: %s [options] mount-point\n", progname);
|
printf("usage: %s [options] file\n", progname);
|
||||||
printf("\n"
|
printf("\n"
|
||||||
"-S server Server name to be used\n"
|
"-S server Server name to be used\n"
|
||||||
"-U username Username sent to server\n"
|
"-U username Username sent to server\n"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
printf("%-52s", q.object_name);
|
printf("%-52s", q.object_name);
|
||||||
printf("%08x\n", q.object_id);
|
printf("%08X\n", q.object_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((found == 0) && (isatty(1)))
|
if ((found == 0) && (isatty(1)))
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ struct nw_queue {
|
|||||||
static struct nw_queue q;
|
static struct nw_queue q;
|
||||||
|
|
||||||
static int term_request;
|
static int term_request;
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
init_queue(struct ncp_conn *conn, char *queue_name,
|
init_queue(struct ncp_conn *conn, char *queue_name,
|
||||||
@@ -37,11 +38,31 @@ init_queue(struct ncp_conn *conn, char *queue_name,
|
|||||||
static int
|
static int
|
||||||
poll_queue(struct nw_queue *q);
|
poll_queue(struct nw_queue *q);
|
||||||
|
|
||||||
void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
/* Obviously, there's more to do */
|
fprintf(stderr, "usage: %s [options] file\n", progname);
|
||||||
return;
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
help(void)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("usage: %s [options]\n", progname);
|
||||||
|
printf("\n"
|
||||||
|
"-S server Server name to be used\n"
|
||||||
|
"-U username Print Server name sent to server\n"
|
||||||
|
"-P password Use this password\n"
|
||||||
|
"-n Do not use any password\n"
|
||||||
|
"-C Don't convert password to uppercase\n"
|
||||||
|
"-q queue name Name of the printing queue to use\n"
|
||||||
|
"-c command Name of print command, default: 'lpr'\n"
|
||||||
|
"-j job type Type of job (Form number) to service\n"
|
||||||
|
"-t timeout Polling interval, default: 30 sec\n"
|
||||||
|
"-d Debug: don't daemonize\n"
|
||||||
|
"-h print this help text\n"
|
||||||
|
"\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NCP_BINDERY_PSERVER
|
#ifndef NCP_BINDERY_PSERVER
|
||||||
@@ -52,10 +73,10 @@ static void
|
|||||||
terminate_handler()
|
terminate_handler()
|
||||||
{
|
{
|
||||||
signal(SIGTERM,terminate_handler);
|
signal(SIGTERM,terminate_handler);
|
||||||
|
signal(SIGINT, terminate_handler);
|
||||||
term_request=1;
|
term_request=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
static void
|
static void
|
||||||
daemonize()
|
daemonize()
|
||||||
{
|
{
|
||||||
@@ -77,7 +98,6 @@ daemonize()
|
|||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
@@ -87,19 +107,46 @@ main(int argc, char *argv[])
|
|||||||
int opt;
|
int opt;
|
||||||
int job_type = 0xffff;
|
int job_type = 0xffff;
|
||||||
int debug = 0;
|
int debug = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
char *queue_name = NULL;
|
char *queue_name = NULL;
|
||||||
|
|
||||||
char default_command[] = "lpr";
|
char default_command[] = "lpr";
|
||||||
char *command = default_command;
|
char *command = default_command;
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i += 1)
|
||||||
|
{
|
||||||
|
if ( (strcmp(argv[i], "-h") == 0)
|
||||||
|
|| (strcmp(argv[i], "-?") == 0))
|
||||||
|
{
|
||||||
|
help();
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i += 1)
|
||||||
|
{
|
||||||
|
if (strcmp(argv[i], "-d") == 0)
|
||||||
|
{
|
||||||
|
debug = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debug == 0)
|
||||||
|
{
|
||||||
|
daemonize();
|
||||||
|
}
|
||||||
|
|
||||||
if (ncp_initialize_as(&conn, &argc, argv, 1, NCP_BINDERY_PSERVER) != 0)
|
if (ncp_initialize_as(&conn, &argc, argv, 1, NCP_BINDERY_PSERVER) != 0)
|
||||||
{
|
{
|
||||||
perror("Could not open connection");
|
perror("Could not open connection");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "q:c:j:t:d")) != EOF)
|
while ((opt = getopt(argc, argv, "q:c:j:t:dh")) != EOF)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
@@ -118,18 +165,26 @@ main(int argc, char *argv[])
|
|||||||
case 'd':
|
case 'd':
|
||||||
debug = 1;
|
debug = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (argc != optind)
|
||||||
|
{
|
||||||
|
usage();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
memzero(q);
|
memzero(q);
|
||||||
|
|
||||||
if (debug == 0)
|
if (queue_name == NULL)
|
||||||
{
|
{
|
||||||
/* We can not daemonize after ncp_initialize, sorry */
|
fprintf(stderr, "You must specify a queue\n");
|
||||||
/* daemonize(); */
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (init_queue(&conn, queue_name, command, &q) != 0)
|
if (init_queue(&conn, queue_name, command, &q) != 0)
|
||||||
@@ -143,6 +198,7 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
term_request = 0;
|
term_request = 0;
|
||||||
signal(SIGTERM,terminate_handler);
|
signal(SIGTERM,terminate_handler);
|
||||||
|
signal(SIGINT, terminate_handler);
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user