Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f88460b2e6 | ||
|
|
fff159f2db | ||
|
|
c4d2144d0d | ||
|
|
134b5d6ebf | ||
|
|
ab78307868 | ||
|
|
3019bba627 | ||
|
|
011a5107c5 | ||
|
|
7179281575 | ||
|
|
b8d830f9a3 | ||
|
|
b36a27bedb | ||
|
|
7d0e3d011b | ||
|
|
84cb1f167d | ||
|
|
64f006632a | ||
|
|
92f749a943 | ||
|
|
6cb56005ea |
BIN
.downloads/ncpfs-0.20.tgz
Normal file
BIN
.downloads/ncpfs-0.20.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.21.tgz
Normal file
BIN
.downloads/ncpfs-0.21.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.22.tgz
Normal file
BIN
.downloads/ncpfs-0.22.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.23.tgz
Normal file
BIN
.downloads/ncpfs-0.23.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-0.24.tgz
Normal file
BIN
.downloads/ncpfs-0.24.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.0.tgz
Normal file
BIN
.downloads/ncpfs-2.0.0.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.1.tgz
Normal file
BIN
.downloads/ncpfs-2.0.1.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.2.tgz
Normal file
BIN
.downloads/ncpfs-2.0.2.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.3.tgz
Normal file
BIN
.downloads/ncpfs-2.0.3.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.4.tgz
Normal file
BIN
.downloads/ncpfs-2.0.4.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.5.tgz
Normal file
BIN
.downloads/ncpfs-2.0.5.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.6.tgz
Normal file
BIN
.downloads/ncpfs-2.0.6.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.7.tgz
Normal file
BIN
.downloads/ncpfs-2.0.7.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.8.tgz
Normal file
BIN
.downloads/ncpfs-2.0.8.tgz
Normal file
Binary file not shown.
BIN
.downloads/ncpfs-2.0.9.tgz
Normal file
BIN
.downloads/ncpfs-2.0.9.tgz
Normal file
Binary file not shown.
14
BUGS
14
BUGS
@@ -5,6 +5,20 @@ But there are really problems that might be fixed in the future.
|
|||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
You might experience lockups of ncpfs volumes. It happens especially
|
||||||
|
under high network traffic, not necessarily only IPX traffic. I am not
|
||||||
|
able to reproduce this problem on my machine, so I'm sorry I can not
|
||||||
|
do anything about that. When such a lockup happens, you have to shut
|
||||||
|
down the complete ipx subsystem by deleting all ipx interfaces,
|
||||||
|
unmounting all ncpfs volumes (in this order!) and restarting all
|
||||||
|
again.
|
||||||
|
|
||||||
|
For the kernel hackers who want to look at the problem: The routine
|
||||||
|
ipx_sendmsg in net/ipx/af_ipx.c sometimes locks forever if called with
|
||||||
|
nonblock=0. I DO NOT KNOW WHY!!! HELP ME, PLEASE!
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
'df' returns 0: Free disk space is distributed among the volumes in
|
'df' returns 0: Free disk space is distributed among the volumes in
|
||||||
NetWare. df is only able to report one number per mounted
|
NetWare. df is only able to report one number per mounted
|
||||||
filesystem. As connections are quite expensive for NetWare (with
|
filesystem. As connections are quite expensive for NetWare (with
|
||||||
|
|||||||
130
Changes
130
Changes
@@ -1,5 +1,133 @@
|
|||||||
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 ftp.gwdg.de:/pub/linux/misc/ncpfs/old.
|
||||||
|
|
||||||
|
ncpfs-2.0.8 -> ncpfs-2.0.9
|
||||||
|
- Added patches directory
|
||||||
|
- Added nwvolinfo and nwtrustee. Thanks to Jacek Stepniewski <cunio@gazeta.pl>
|
||||||
|
- nwpasswd can change other's passwords. Thanks to Martin Stover.
|
||||||
|
|
||||||
|
ncpfs-2.0.7 -> ncpfs-2.0.8
|
||||||
|
- Fixed util/Makefile for easier optimization handling. Thanks to Rik
|
||||||
|
Faith <faith@cs.unc.edu> for this one
|
||||||
|
- added nwfstime. You can now set the file server date and time from Linux.
|
||||||
|
- added the contrib directory. Feel free to add more!
|
||||||
|
|
||||||
|
ncpfs-2.0.6 -> ncpfs-2.0.7
|
||||||
|
- Hopefully removed one security problem in ncpumount.
|
||||||
|
- Added command line flag to pserver.c
|
||||||
|
- Heavily reconstructed ncpfs utils. Created the lib/ dir.
|
||||||
|
- Separated the uid utils in sutil
|
||||||
|
- Add nwsfind to enable users to use ncpfs safely without setting
|
||||||
|
the utils setuid root.
|
||||||
|
|
||||||
|
ncpfs-2.0.5 -> ncpfs-2.0.6
|
||||||
|
- Added a short description of a problem that I need help with to the
|
||||||
|
file BUGS. If you know a bit of the linux networking code, please
|
||||||
|
take a look at it. Thanks a lot.
|
||||||
|
- Added canonic output format to nwpbvalues and the command nwbpset. I
|
||||||
|
would like to invite you to help building capable bindery management
|
||||||
|
utilities. For little examples, look at the manual page of nwbpset.
|
||||||
|
- Added some values to ipxparse. Those interested in NDS should take a
|
||||||
|
look at it. It's really not much, but maybe it's a beginning.
|
||||||
|
|
||||||
|
ncpfs-2.0.4 -> ncpfs-2.0.5
|
||||||
|
- Removed another bug in nwbpvalues.
|
||||||
|
- Cleaned up man/Makefile
|
||||||
|
- Some manpage typos fixed. Thanks to Jim Van Zandt
|
||||||
|
<jrv@mbunix.mitre.org>
|
||||||
|
- added nwrights
|
||||||
|
|
||||||
|
ncpfs-2.0.3 -> ncpfs-2.0.4
|
||||||
|
- Changed name of npasswd to nwpasswd, as npasswd collides with
|
||||||
|
RedHat. Thanks to Mike Slater <mslater@nfinity.com> for pointing me
|
||||||
|
at this one.
|
||||||
|
- Put '\r\n' into nwmsg, because sometimes it did not print
|
||||||
|
correctly. Thanks to Petr Vandrovec Ing. VTEI
|
||||||
|
<VANDROVE@vcnet.vc.cvut.cz> for this one.
|
||||||
|
- Improved the ELF Makefile for ELF support. Thanks to Uwe Bonnes
|
||||||
|
<bon@elektron.ikp.physik.th-darmstadt.de>.
|
||||||
|
- Removed a very embarassing bug in nwpvalues :-(.
|
||||||
|
- Added a some routines to nwbpvalues.
|
||||||
|
|
||||||
|
ncpfs-2.0.2 -> ncpfs-2.0.3
|
||||||
|
- Removed the kernel-2.0 directory. Linus took the patch into 2.0.8.
|
||||||
|
So, if you want to use long file name support, upgrade to Linux
|
||||||
|
kernel version 2.0.8.
|
||||||
|
- Applied the lfn patch to the kernel-1.2 module with some light
|
||||||
|
testing. If you experience problems, tell it to me, and use the
|
||||||
|
ncpfs-2.0.2 kernel module, or upgrade to Linux 2.0.8.
|
||||||
|
- Added unencrypted login when no crypt key is returned.
|
||||||
|
- Hopefully improved error messages a bit
|
||||||
|
- Added some values to ipxparse
|
||||||
|
- For ELF systems, moved ncplib to /lib/libncp.so.1.x. This saves
|
||||||
|
about 1MB of disk space. As ncpfs grows, the saving will
|
||||||
|
increase. Please look at the Makefile to enable this.
|
||||||
|
- Enhanced nwfsinfo a bit. (Even with a manpage!)
|
||||||
|
- Added nwuserlist.
|
||||||
|
|
||||||
|
ncpfs-2.0.1 -> ncpfs-2.0.2
|
||||||
|
- Added some values to ipxparse.
|
||||||
|
- Added a patch against 2.0.7 for long file names support. I did not
|
||||||
|
apply this change to the 1.2-module. Please upgrade to 2.0.7 if you
|
||||||
|
want to use long file names.
|
||||||
|
- nwbpvalues can print ITEM properties
|
||||||
|
|
||||||
|
ncpfs-2.0.0 -> ncpfs-2.0.1
|
||||||
|
- Added some values to ipxparse.
|
||||||
|
- Added the little bindery utilities. Maybe someone has the time to
|
||||||
|
write a shellscript named 'nwadduser' ?
|
||||||
|
- Fixed a bug that made the __255 message reappear. Many thanks to
|
||||||
|
Guntram Blom for his detailed bug report.
|
||||||
|
- Fixed a bug that made ncpfs incompatible with W95's server
|
||||||
|
capabilities. Thanks to Tomasz Babczynski
|
||||||
|
<faster@dino.ict.pwr.wroc.pl> for this one.
|
||||||
|
|
||||||
|
ncpfs-0.24 -> ncpfs-2.0.0
|
||||||
|
- Changed the numbering scheme :-).
|
||||||
|
- Added npasswd. Many thanks to Guntram Blom for his work!
|
||||||
|
- Hopefully improved error messages a bit
|
||||||
|
- Hopefully made slist a bit more robust
|
||||||
|
|
||||||
|
ncpfs-0.23 -> ncpfs-0.24
|
||||||
|
- Fixed a bug that made it impossible to umount a filesystem after you
|
||||||
|
tried 'mkdir .' or 'mkdir ..'.
|
||||||
|
- Fixed a bad race condition when opening files.
|
||||||
|
- Made the default timeout values more robust.
|
||||||
|
|
||||||
|
ncpfs-0.22 -> ncpfs-0.23
|
||||||
|
- Fixed a memory allocation problem in nwmsg.c. Thanks to
|
||||||
|
Andrew Ross <anr1001@hermes.cam.ac.uk>
|
||||||
|
- slist hopefully does not ask for a password anymore.
|
||||||
|
- cleaned up error messages a bit.
|
||||||
|
- ncpmount now calls modprobe instead of insmod.
|
||||||
|
|
||||||
|
ncpfs-0.21 -> ncpfs-0.22
|
||||||
|
- removed a bad race condition in kernel-1.2/src/dir.c.
|
||||||
|
- handle 0x9999-responses from the ncp server correctly.
|
||||||
|
- Bindery functions in ncplib.c by Brian G. Reid (breid@tim.com)
|
||||||
|
- set blocksize to 512 to satisfy 'du -k'
|
||||||
|
|
||||||
|
ncpfs-0.20 -> ncpfs-0.21
|
||||||
|
- Included two bugfixes in ncplib.c found by Jeff Buhrt
|
||||||
|
<buhrt@iquest.net>.
|
||||||
|
- Included a bugfix in kernel code that could only show for servers
|
||||||
|
that do not support namespace calls. I should have tried ncpfs
|
||||||
|
against lwared... Thanks to Neil Turton <ndt1001@chu.cam.ac.uk> for
|
||||||
|
this fix.
|
||||||
|
|
||||||
|
ncpfs-0.19 -> ncpfs-0.20
|
||||||
|
- Changed the home site for ncpfs from linux01.gwdg.de:/pub/ncpfs
|
||||||
|
to ftp.gwdg.de:/pub/linux/misc/ncpfs. linux01 will remain available,
|
||||||
|
but we would like to reduce the load on that machine. Sites
|
||||||
|
mirroring linux01 please redirect your mirror software to
|
||||||
|
ftp.gwdg.de. Thanks.
|
||||||
|
- Removed a bug in ncplib.c that made slist require a full
|
||||||
|
login. Thanks to Neil Turton <ndt1001@chu.cam.ac.uk> for the hint.
|
||||||
|
- The first real user contribution: ncopy by Brian G. Reid
|
||||||
|
(breid@tim.com) and Tom C. Henderson (thenderson@tim.com). Many
|
||||||
|
thanks to you! If you find bugs in ncopy, tell them, not me ;-)
|
||||||
|
- Handle expired passwords. Thanks to "Mathew Lim" <M.Lim@sp.ac.sg>
|
||||||
|
for the hint.
|
||||||
|
|
||||||
ncpfs-0.18 -> ncpfs-0.19
|
ncpfs-0.18 -> ncpfs-0.19
|
||||||
|
|
||||||
|
|||||||
34
FAQ
34
FAQ
@@ -1,13 +1,39 @@
|
|||||||
There is certainly not enough material to call this an FAQ, but some
|
There is certainly not enough material to call this an FAQ, but some
|
||||||
questions reach me regularly. Probably the documenation is not clear
|
questions reach me regularly. Probably the documentation is not clear
|
||||||
enough.
|
enough.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Q: Does ncpfs support long file names, using the OS/2 namespace?
|
Q: The ncpfs utilities like slist or ncpmount tell me that they can
|
||||||
|
not find a server, although I'm sure there are servers on my
|
||||||
|
net. What's wrong?
|
||||||
|
|
||||||
No. Not yet. I still have to sort out how that really works. But it should
|
You probably used
|
||||||
certainly be possible.
|
|
||||||
|
ipx_configure --auto_interface=on --auto_primary=on
|
||||||
|
|
||||||
|
and you have Windows (95?) workstations on your network. Windows 95
|
||||||
|
makes Linux configure IPX interfaces for non-existent frame types. To
|
||||||
|
solve this problem, you have to configure your IPX interface manually
|
||||||
|
with the command
|
||||||
|
|
||||||
|
ipx_interface add -p <device> <frame>
|
||||||
|
|
||||||
|
For <device> use eth0, eth1 or whatever you network adapter is
|
||||||
|
called. The value for <frame> must match the frame type used on your
|
||||||
|
network. Possible values are 802.2, 802.3, SNAP and EtherII.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Q: I have difficulties with NetWare 4.1. What can I do?
|
||||||
|
|
||||||
|
To be honest, I do not really know. Currently my only test equipment
|
||||||
|
is a NetWare 3.11 server. You should make your 4.1 Server as
|
||||||
|
3.x-compatible as it can be. As I do not know 4.1, you are on your own
|
||||||
|
doing this.
|
||||||
|
|
||||||
|
A promising hint that has already helped some people is to switch off
|
||||||
|
packet signatures on the 4.1 server, as ncpfs does not support them.
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
80
Makefile
80
Makefile
@@ -2,31 +2,51 @@
|
|||||||
# Makefile for the linux ncp-filesystem routines.
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
#
|
#
|
||||||
|
|
||||||
VERSION = 0.19
|
VERSION = 2.0.9
|
||||||
TOPDIR = $(shell pwd)
|
|
||||||
|
|
||||||
BINDIR = /usr/local/bin
|
|
||||||
SBINDIR = /sbin
|
|
||||||
INTERM_BINDIR = $(TOPDIR)/bin
|
|
||||||
SUBDIRS = util ipx-1.0 man
|
|
||||||
|
|
||||||
#
|
|
||||||
# The following 2 lines are for those who use Kernel version 1.2.x.
|
|
||||||
# If you have a kernel later than 1.3.53, please comment out the
|
|
||||||
# the following lines. You have to recompile your kernel
|
|
||||||
# and say 'y' when 'make config' asks you for IPX and ncpfs.
|
|
||||||
#
|
|
||||||
SUBDIRS += kernel-1.2/src
|
|
||||||
INCLUDES = -I$(TOPDIR)/kernel-1.2
|
|
||||||
|
|
||||||
# If you are using kerneld to autoload ncp support,
|
# If you are using kerneld to autoload ncp support,
|
||||||
# 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 SBINDIR KERNELD VERSION
|
# If your system is ELF, either also do a 'make install', or append the util/
|
||||||
|
# directory where the dynamic library resides to the environment
|
||||||
|
# variable LD_LIBRARY_PATH
|
||||||
|
HAVE_ELF=$(shell file `whereis gcc|cut -d ' ' -f 2`| \
|
||||||
|
grep ELF >/dev/null && echo -n yes )
|
||||||
|
|
||||||
|
TOPDIR = $(shell pwd)
|
||||||
|
BINDIR = /usr/bin
|
||||||
|
SBINDIR = /sbin
|
||||||
|
SUBDIRS = lib sutil util ipx-1.0 man
|
||||||
|
|
||||||
|
KVERSION=$(shell uname -r | cut -b1-3)
|
||||||
|
|
||||||
|
INCLUDES=-I$(TOPDIR)/include
|
||||||
|
|
||||||
|
ifeq ($(KVERSION),1.2)
|
||||||
|
SUBDIRS += kernel-1.2/src
|
||||||
|
INCLUDES += -I$(TOPDIR)/kernel-1.2
|
||||||
|
endif
|
||||||
|
|
||||||
|
COPT = -O2
|
||||||
|
COPT += -g
|
||||||
|
CFLAGS = $(COPT) -Wall $(INCLUDES) $(KERNELD) -DNCPFS_VERSION=\"$(VERSION)\"
|
||||||
|
|
||||||
|
export INCLUDES BINDIR SBINDIR KERNELD VERSION HAVE_ELF CFLAGS
|
||||||
|
|
||||||
all:
|
all:
|
||||||
for i in $(SUBDIRS); do make -C $$i; done
|
for i in $(SUBDIRS); do make -C $$i all; done
|
||||||
|
@if [ "$(HAVE_ELF)" = yes ] ;\
|
||||||
|
then \
|
||||||
|
echo ; echo ; echo ;\
|
||||||
|
echo Please add \'`pwd`/lib\' to the environment ; \
|
||||||
|
echo variable LD_LIBRARY_PATH by executing ; \
|
||||||
|
echo ;\
|
||||||
|
echo export LD_LIBRARY_PATH=\"\$$LD_LIBRARY_PATH:`pwd`/lib\" ; \
|
||||||
|
echo ;\
|
||||||
|
echo or do a \'make install\'. ;\
|
||||||
|
echo ;\
|
||||||
|
fi
|
||||||
|
|
||||||
dep:
|
dep:
|
||||||
for i in $(SUBDIRS); do make -C $$i dep; done
|
for i in $(SUBDIRS); do make -C $$i dep; done
|
||||||
@@ -34,16 +54,16 @@ dep:
|
|||||||
install:
|
install:
|
||||||
for i in $(SUBDIRS); do make -C $$i install; done
|
for i in $(SUBDIRS); do make -C $$i install; done
|
||||||
|
|
||||||
clean:
|
clean_me:
|
||||||
rm -f `find . -type f -name '*.o' -print`
|
rm -f `find -name '*.out'`
|
||||||
rm -f `find . -type f -name '*~' -print`
|
rm -f `find -name '*~'`
|
||||||
rm -f `find . -type f -name '.depend' -print`
|
rm -f *.tgz
|
||||||
rm -f `find . -type f -name '*.out' -print`
|
|
||||||
|
clean: clean_me
|
||||||
for i in $(SUBDIRS); do make -C $$i clean; done
|
for i in $(SUBDIRS); do make -C $$i clean; done
|
||||||
|
|
||||||
mrproper: clean
|
mrproper: clean_me
|
||||||
rm -fr $(INTERM_BINDIR)/* ncpfs.tgz
|
for i in $(SUBDIRS) ipxdump; do make -C $$i mrproper; done
|
||||||
make -C util mrproper
|
|
||||||
|
|
||||||
modules: ncpfs.o
|
modules: ncpfs.o
|
||||||
|
|
||||||
@@ -51,7 +71,11 @@ SRCPATH=$(shell pwd)
|
|||||||
SRCDIR=$(shell basename $(SRCPATH))
|
SRCDIR=$(shell basename $(SRCPATH))
|
||||||
DISTFILE=$(SRCDIR).tgz
|
DISTFILE=$(SRCDIR).tgz
|
||||||
|
|
||||||
dist: tgz
|
dist: mrproper
|
||||||
|
(cd ..; \
|
||||||
|
tar cvf - $(SRCDIR) | \
|
||||||
|
gzip -9 > $(DISTFILE); \
|
||||||
|
mv $(DISTFILE) $(SRCDIR))
|
||||||
make dep
|
make dep
|
||||||
make all
|
make all
|
||||||
|
|
||||||
|
|||||||
38
README
38
README
@@ -3,8 +3,35 @@ some little utilities it also contains nprint, which enables you to
|
|||||||
print on NetWare print queues. The opposite side, pserver, is also
|
print on NetWare print queues. The opposite side, pserver, is also
|
||||||
provided.
|
provided.
|
||||||
|
|
||||||
|
ncpfs works with NetWare versions 3.x and following. It does NOT work
|
||||||
|
with NetWare version 2.x. Some of the NetWare look-alikes, such as
|
||||||
|
CD-ROM servers WinNT 3.51 Server are also NOT supported. This
|
||||||
|
restriction comes from the fact that ncpfs relies heavily on the name
|
||||||
|
space facilities NetWare supports since version 3. When you want to
|
||||||
|
mount volumes that have been exported by mars_nwe, you have to
|
||||||
|
activate the name space calls in mars_nwe's config.h file, although
|
||||||
|
probably it's more clever to use nfs between two Linux machines.
|
||||||
|
|
||||||
|
The user-space utilities such as nprint and the bindery utils should
|
||||||
|
work with all versions of NetWare.
|
||||||
|
|
||||||
|
ncpfs does NOT support access to the NDS, so if you want to mount
|
||||||
|
volumes exported by a NetWare 4.x server, you will have to install the
|
||||||
|
bindery emulation on that server. If you need access to the NDS, ask
|
||||||
|
Caldera for their CND. See http://www.caldera.com for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
|
||||||
INSTALLATION
|
INSTALLATION
|
||||||
|
|
||||||
|
Before you start the installation, make sure that your kernel has IPX
|
||||||
|
support compiled in. When 'make config' asks you for
|
||||||
|
|
||||||
|
The IPX protocol (CONFIG_IPX) [N/y/m/?]
|
||||||
|
|
||||||
|
simply answer 'y'. Probably you do not need the full internal net that
|
||||||
|
you are asked for next.
|
||||||
|
|
||||||
The installation of ncpfs depends on the kernel version you are
|
The installation of ncpfs depends on the kernel version you are
|
||||||
using. For kernel 1.2, you should simply type 'make' and look at
|
using. For kernel 1.2, you should simply type 'make' and look at
|
||||||
what's in the bin/ directory after that. Please be sure that your
|
what's in the bin/ directory after that. Please be sure that your
|
||||||
@@ -22,10 +49,13 @@ asks for ncpfs. After you have rebooted with the new kernel, 'cat
|
|||||||
/proc/filesystems' should show you a line saying that the kernel knows
|
/proc/filesystems' should show you a line saying that the kernel knows
|
||||||
ncpfs.
|
ncpfs.
|
||||||
|
|
||||||
With Kernel 1.3.71 or later you also have to modify the Makefile in the
|
If you are running kerneld, please uncomment the corresponding line in
|
||||||
directory you found this README in. Please see the Makefile for the
|
the Makefile to reflect this.
|
||||||
necessary modifications. Then typing 'make' should work with no
|
|
||||||
problem.
|
If your system is ELF, please enable the use of the shared ncp-library
|
||||||
|
in the Makefile. This will save at least 1MB of disk space.
|
||||||
|
|
||||||
|
After you adapted your Makefile, type 'make' and, as root, 'make install'.
|
||||||
|
|
||||||
|
|
||||||
HELP
|
HELP
|
||||||
|
|||||||
20
TODO
20
TODO
@@ -1,20 +0,0 @@
|
|||||||
Here's a list of things I want to do. Feel free to send suggestions,
|
|
||||||
or even help me ;-).
|
|
||||||
|
|
||||||
- little utilities for bindery access, such as nwlsobj, nwlsprop,
|
|
||||||
nwcreateobj and so on.
|
|
||||||
|
|
||||||
- Add flags to pserver's command line, so that the print command can
|
|
||||||
find out the name of user who printed the job.
|
|
||||||
|
|
||||||
- do rtt estimation, like tcp does.
|
|
||||||
|
|
||||||
- Do better connection management. I imagine to create a ncpd.
|
|
||||||
|
|
||||||
- When ncp is done, one can think about mounting several volumes over
|
|
||||||
a single NCP connection. This should make the trade-off mentioned in
|
|
||||||
ncpmount.8 unnecessary.
|
|
||||||
|
|
||||||
- long file names
|
|
||||||
|
|
||||||
- Do some kind of mapping of NCP uid's to unix uid's
|
|
||||||
24
bin/nwbpsecurity
Executable file
24
bin/nwbpsecurity
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
SECURITY=`nwbpvalues $* -c | head -3 | tail -1`
|
||||||
|
WRITE=`echo $SECURITY | cut -b1`
|
||||||
|
READ=`echo $SECURITY | cut -b2`
|
||||||
|
|
||||||
|
function print_sec () {
|
||||||
|
case "$1" in
|
||||||
|
0 ) echo "Everyone"
|
||||||
|
;;
|
||||||
|
1 ) echo "Logged in"
|
||||||
|
;;
|
||||||
|
2 ) echo "Object"
|
||||||
|
;;
|
||||||
|
3 ) echo "Supervisor"
|
||||||
|
;;
|
||||||
|
* ) echo "Bindery"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -n "Write security: "
|
||||||
|
print_sec $WRITE
|
||||||
|
echo -n "Read security : "
|
||||||
|
print_sec $READ
|
||||||
239
contrib/tknwmsg/nwmsg.c
Normal file
239
contrib/tknwmsg/nwmsg.c
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
/*
|
||||||
|
* nwmsg.c
|
||||||
|
*
|
||||||
|
* Fetch NetWare broadcast messages and write to the user
|
||||||
|
*
|
||||||
|
* Copyright (C) 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <syslog.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <paths.h>
|
||||||
|
#include <utmp.h>
|
||||||
|
#include <mntent.h>
|
||||||
|
#include "ncplib.h"
|
||||||
|
|
||||||
|
static int search_utmp(char *user, char *tty);
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
void
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
struct ncp_conn *conn;
|
||||||
|
char message[256];
|
||||||
|
|
||||||
|
char *mount_point;
|
||||||
|
struct ncp_fs_info info;
|
||||||
|
struct passwd *pwd;
|
||||||
|
char tty[256];
|
||||||
|
char tty_path[256];
|
||||||
|
FILE *tty_file;
|
||||||
|
FILE *mtab;
|
||||||
|
struct mntent *mnt;
|
||||||
|
long err;
|
||||||
|
|
||||||
|
char tknwmsg_command[256];
|
||||||
|
int error_level;
|
||||||
|
|
||||||
|
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
openlog("nwmsg", LOG_PID, LOG_LPR);
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "usage: %s mount-point\n",
|
||||||
|
progname);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
mount_point = argv[1];
|
||||||
|
if ((conn = ncp_open_mount(mount_point, &err)) == NULL)
|
||||||
|
{
|
||||||
|
com_err(progname, err, "in ncp_open_mount");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ncp_get_broadcast_message(conn, message) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: could not get broadcast message\n",
|
||||||
|
progname);
|
||||||
|
ncp_close(conn);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(message) == 0)
|
||||||
|
{
|
||||||
|
syslog(LOG_DEBUG, "no message");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
syslog(LOG_DEBUG, "message: %s", message);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
info.version = NCP_GET_FS_INFO_VERSION;
|
||||||
|
if (ioctl(conn->mount_fid, NCP_IOC_GET_FS_INFO, &info) < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: could not ioctl on connection: %s\n",
|
||||||
|
progname, strerror(errno));
|
||||||
|
ncp_close(conn);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ncp_close(conn);
|
||||||
|
|
||||||
|
if ((pwd = getpwuid(info.mounted_uid)) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: user %d not known\n",
|
||||||
|
progname, info.mounted_uid);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((mtab = fopen(MOUNTED, "r")) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: can't open %s\n",
|
||||||
|
progname, MOUNTED);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((mnt = getmntent(mtab)) != NULL)
|
||||||
|
{
|
||||||
|
if (strcmp(mnt->mnt_dir, mount_point) == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mnt == NULL)
|
||||||
|
{
|
||||||
|
syslog(LOG_DEBUG, "cannot find mtab entry\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (search_utmp(pwd->pw_name, tty) != 0)
|
||||||
|
{
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(tty_path, "/dev/%s", tty);
|
||||||
|
if ((tty_file = fopen(tty_path, "w")) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: cannot open %s: %s\n",
|
||||||
|
progname, tty_path, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(tty_file,"\r\n\007\007\007Message from NetWare Server: %s\r\n",
|
||||||
|
mnt->mnt_fsname);
|
||||||
|
fprintf(tty_file, "%s\r\n", message);
|
||||||
|
|
||||||
|
|
||||||
|
//formulate the full system command for the X notice...
|
||||||
|
strcat(tknwmsg_command,"/usr/bin/tknwmsg -display :0 ");
|
||||||
|
strcat(tknwmsg_command,"Message from NetWare Server: ");
|
||||||
|
strcat(tknwmsg_command,mnt->mnt_fsname);
|
||||||
|
strcat(tknwmsg_command," ");
|
||||||
|
strcat(tknwmsg_command,message);
|
||||||
|
strcat(tknwmsg_command," &");
|
||||||
|
|
||||||
|
//execute this system command...
|
||||||
|
error_level = system(tknwmsg_command);
|
||||||
|
|
||||||
|
|
||||||
|
fclose(tty_file);
|
||||||
|
fclose(mtab);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The following routines have been taken from util-linux-2.5's write.c */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* term_chk - check that a terminal exists, and get the message bit
|
||||||
|
* and the access time
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
term_chk(char *tty, int *msgsokP, time_t *atimeP, int *showerror)
|
||||||
|
{
|
||||||
|
struct stat s;
|
||||||
|
char path[MAXPATHLEN];
|
||||||
|
|
||||||
|
(void)sprintf(path, "/dev/%s", tty);
|
||||||
|
if (stat(path, &s) < 0) {
|
||||||
|
if (showerror)
|
||||||
|
(void)fprintf(stderr,
|
||||||
|
"write: %s: %s\n", path, strerror(errno));
|
||||||
|
return(1);
|
||||||
|
}
|
||||||
|
*msgsokP = (s.st_mode & (S_IWRITE >> 3)) != 0; /* group write bit */
|
||||||
|
*atimeP = s.st_atime;
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* search_utmp - search utmp for the "best" terminal to write to
|
||||||
|
*
|
||||||
|
* Ignores terminals with messages disabled, and of the rest, returns
|
||||||
|
* the one with the most recent access time. Returns as value the number
|
||||||
|
* of the user's terminals with messages enabled, or -1 if the user is
|
||||||
|
* not logged in at all.
|
||||||
|
*
|
||||||
|
* Special case for writing to yourself - ignore the terminal you're
|
||||||
|
* writing from, unless that's the only terminal with messages enabled.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
search_utmp(char *user, char *tty)
|
||||||
|
{
|
||||||
|
struct utmp u;
|
||||||
|
time_t bestatime, atime;
|
||||||
|
int ufd, nloggedttys, nttys, msgsok, user_is_me;
|
||||||
|
|
||||||
|
char atty[sizeof(u.ut_line) + 1];
|
||||||
|
|
||||||
|
if ((ufd = open(_PATH_UTMP, O_RDONLY)) < 0) {
|
||||||
|
perror("utmp");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
nloggedttys = nttys = 0;
|
||||||
|
bestatime = 0;
|
||||||
|
user_is_me = 0;
|
||||||
|
while (read(ufd, (char *) &u, sizeof(u)) == sizeof(u))
|
||||||
|
if (strncmp(user, u.ut_name, sizeof(u.ut_name)) == 0) {
|
||||||
|
++nloggedttys;
|
||||||
|
|
||||||
|
(void)strncpy(atty, u.ut_line, sizeof(u.ut_line));
|
||||||
|
atty[sizeof(u.ut_line)] = '\0';
|
||||||
|
|
||||||
|
if (term_chk(atty, &msgsok, &atime, 0))
|
||||||
|
continue; /* bad term? skip */
|
||||||
|
if (!msgsok)
|
||||||
|
continue; /* skip ttys with msgs off */
|
||||||
|
|
||||||
|
if (u.ut_type != USER_PROCESS)
|
||||||
|
continue; /* it's not a valid entry */
|
||||||
|
|
||||||
|
++nttys;
|
||||||
|
if (atime > bestatime) {
|
||||||
|
bestatime = atime;
|
||||||
|
(void)strcpy(tty, atty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)close(ufd);
|
||||||
|
if (nloggedttys == 0) {
|
||||||
|
(void)fprintf(stderr, "write: %s is not logged in\n", user);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
57
contrib/tknwmsg/tknwmsg
Executable file
57
contrib/tknwmsg/tknwmsg
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/wish
|
||||||
|
|
||||||
|
#This is a procedure for centering windows...
|
||||||
|
#
|
||||||
|
#
|
||||||
|
proc center {window_to_center} {
|
||||||
|
|
||||||
|
update idletasks
|
||||||
|
|
||||||
|
set width [expr [winfo reqwidth $window_to_center]]
|
||||||
|
set height [expr [winfo reqheight $window_to_center]]
|
||||||
|
|
||||||
|
if {$width < 400} {set width 400}
|
||||||
|
|
||||||
|
set x [expr [winfo screenwidth $window_to_center]/2 - $width/2]
|
||||||
|
set y [expr [winfo screenheight $window_to_center]/2 - $height/2]
|
||||||
|
|
||||||
|
wm geometry $window_to_center $width\x$height+$x+$y
|
||||||
|
|
||||||
|
#update idletasks
|
||||||
|
wm deiconify $window_to_center
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#This is the main() proc...
|
||||||
|
|
||||||
|
set argv_exist [string length $argv]
|
||||||
|
if {$argv_exist <= 0} {puts "syntax: tkmesg string\a";exit}
|
||||||
|
|
||||||
|
|
||||||
|
wm withdraw .
|
||||||
|
wm title . "Netware Client for Linux"
|
||||||
|
wm resizable . 0 0
|
||||||
|
|
||||||
|
puts "\a"
|
||||||
|
|
||||||
|
label .mesg -text $argv
|
||||||
|
pack .mesg -padx 5 -pady 5
|
||||||
|
|
||||||
|
button .ok -text "Ok" -command exit -width 5
|
||||||
|
pack .ok -padx 5 -pady 5
|
||||||
|
|
||||||
|
focus .ok
|
||||||
|
bind .ok <Return> exit
|
||||||
|
|
||||||
|
|
||||||
|
center .
|
||||||
|
|
||||||
|
#beep the users console after the window appears...
|
||||||
|
set ofd [open /dev/console w]
|
||||||
|
puts $ofd "\a"
|
||||||
|
close $ofd
|
||||||
BIN
contrib/tknwmsg/tknwmsg.gif
Normal file
BIN
contrib/tknwmsg/tknwmsg.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
29
contrib/tknwmsg/tknwmsg.html
Normal file
29
contrib/tknwmsg/tknwmsg.html
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||||
|
<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<TITLE></TITLE>
|
||||||
|
<META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.25 i586) [Netscape]">
|
||||||
|
</HEAD>
|
||||||
|
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EF" VLINK="#51188E" ALINK="#FF0000">
|
||||||
|
|
||||||
|
<CENTER><P><FONT SIZE=+3>Tknwmsg</FONT></P></CENTER>
|
||||||
|
|
||||||
|
<P>Recieve NetWare broadcasts in a dialog under Linux.</P>
|
||||||
|
|
||||||
|
<P>The original source was included in the ncpfs package distributed on
|
||||||
|
sunsite.unc.edu. The modified source to nwmsg.c and a tcl/tk script can
|
||||||
|
be downloaded here. The <A HREF="tknwmsg_README">tknwmsg_README</A> is
|
||||||
|
also available for download.</P>
|
||||||
|
|
||||||
|
<P>The only requirements for installation are a system with tcl/tk installed
|
||||||
|
and X running. The system() command will fail if X is not running.</P>
|
||||||
|
|
||||||
|
<P>
|
||||||
|
<HR WIDTH="100%"></P>
|
||||||
|
|
||||||
|
<P><A HREF="mailto:kburto1@umbc.edu">Kevin Burton</A></P>
|
||||||
|
|
||||||
|
<P><A HREF="http://www.gl.umbc.edu/~kburto1/kburto1.html">http://www.gl.umbc.edu/~kburto1/kburto1.html</A></P>
|
||||||
|
|
||||||
|
</BODY>
|
||||||
|
</HTML>
|
||||||
40
contrib/tknwmsg/tknwmsg_README
Normal file
40
contrib/tknwmsg/tknwmsg_README
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
Tknwmsg 1.0 for NCPFS.
|
||||||
|
|
||||||
|
Kevin Burton (kburto1@umbc.edu), Copyright 1996
|
||||||
|
Distributed under GPL (GNU Public License)
|
||||||
|
|
||||||
|
-- INTRO --
|
||||||
|
|
||||||
|
Tknwmesg is a extension for ncpfs for linux that allows users to recived messages
|
||||||
|
while under an X console.
|
||||||
|
|
||||||
|
Essentially it is an extension for nwmsg that comes with ncpfs. The only
|
||||||
|
changes are a system() call to a tk script that will run a dialog with an "ok"
|
||||||
|
button under X.
|
||||||
|
|
||||||
|
-- INSTALLATION --
|
||||||
|
TCL/TK must be installed on your system. If they are not then you will have to
|
||||||
|
get the source for their installation if you want to run tkmesg.
|
||||||
|
|
||||||
|
- Download ncpfs from sunsite.unc.edu
|
||||||
|
- Run "su" to become root if you are not already root.
|
||||||
|
- Unpack ncpfs in a temporary directory.
|
||||||
|
- copy the Tknwmsg nwmsg.c to util/nwmsg.c in your ncpfs directory.
|
||||||
|
- copy tknwmsg to /usr/bin
|
||||||
|
- change to your nwmsg directory.
|
||||||
|
- run "make all;make install" and the new version of tknwmsg will be
|
||||||
|
installed.
|
||||||
|
|
||||||
|
-- USE --
|
||||||
|
|
||||||
|
- At least 1 terminal on the local system must be have "mesg y". Else
|
||||||
|
no GUI dialog will be displayed.
|
||||||
|
|
||||||
|
Using mesg y in a .bashrc will not work. The only way that I have
|
||||||
|
found to do this is to have chmod a+w /dev/ttyp? in Xsession or
|
||||||
|
$HOME/.xsession. Also it may be necessary to have .bashrc do the
|
||||||
|
same thing if users are starting and stopping xterms.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
40
include/com_err.h
Normal file
40
include/com_err.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Header file for common error description library.
|
||||||
|
*
|
||||||
|
* Copyright 1988, Student Information Processing Board of the
|
||||||
|
* Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* For copyright and distribution info, see the documentation supplied
|
||||||
|
* with this package.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __COM_ERR_H
|
||||||
|
|
||||||
|
typedef long errcode_t;
|
||||||
|
|
||||||
|
#ifdef __STDC__
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* ANSI C -- use prototypes etc */
|
||||||
|
void com_err(const char *, long, const char *,...);
|
||||||
|
void com_err_va(const char *whoami, errcode_t code, const char *fmt,
|
||||||
|
va_list args);
|
||||||
|
char const *error_message(long);
|
||||||
|
extern void (*com_err_hook) (const char *, long, const char *, va_list);
|
||||||
|
void (*set_com_err_hook(void (*)(const char *, long, const char *, va_list)))
|
||||||
|
(const char *, long, const char *, va_list);
|
||||||
|
void (*reset_com_err_hook(void)) (const char *, long, const char *, va_list);
|
||||||
|
int init_error_table(const char *const *msgs, int base, int count);
|
||||||
|
#else
|
||||||
|
/* no prototypes */
|
||||||
|
void com_err();
|
||||||
|
void com_err_va();
|
||||||
|
char *error_message();
|
||||||
|
extern void (*com_err_hook) ();
|
||||||
|
void (*set_com_err_hook()) ();
|
||||||
|
void (*reset_com_err_hook()) ();
|
||||||
|
int init_error_table();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __COM_ERR_H
|
||||||
|
#endif /* ! defined(__COM_ERR_H) */
|
||||||
98
include/ipxlib.h
Normal file
98
include/ipxlib.h
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* ipxlib.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 1995 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _IPXLIB_H
|
||||||
|
#define _IPXLIB_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/ncp.h>
|
||||||
|
#include <linux/ncp_fs.h>
|
||||||
|
#include <linux/ipx.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef unsigned long IPXNet;
|
||||||
|
typedef unsigned short IPXPort;
|
||||||
|
typedef unsigned char IPXNode[IPX_NODE_LEN];
|
||||||
|
|
||||||
|
#define IPX_USER_PTYPE (0x00)
|
||||||
|
#define IPX_RIP_PTYPE (0x01)
|
||||||
|
#define IPX_SAP_PTYPE (0x04)
|
||||||
|
#define IPX_AUTO_PORT (0x0000)
|
||||||
|
#define IPX_SAP_PORT (0x0452)
|
||||||
|
#define IPX_RIP_PORT (0x0453)
|
||||||
|
|
||||||
|
#define IPX_SAP_GENERAL_QUERY (0x0001)
|
||||||
|
#define IPX_SAP_GENERAL_RESPONSE (0x0002)
|
||||||
|
#define IPX_SAP_NEAREST_QUERY (0x0003)
|
||||||
|
#define IPX_SAP_NEAREST_RESPONSE (0x0004)
|
||||||
|
|
||||||
|
#define IPX_SAP_FILE_SERVER (0x0004)
|
||||||
|
|
||||||
|
struct sap_query
|
||||||
|
{
|
||||||
|
unsigned short query_type; /* net order */
|
||||||
|
unsigned short server_type; /* net order */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sap_server_ident
|
||||||
|
{
|
||||||
|
unsigned short server_type __attribute__((packed));
|
||||||
|
char server_name[48] __attribute__((packed));
|
||||||
|
IPXNet server_network __attribute__((packed));
|
||||||
|
IPXNode server_node __attribute__((packed));
|
||||||
|
IPXPort server_port __attribute__((packed));
|
||||||
|
unsigned short intermediate_network __attribute__((packed));
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IPX_RIP_REQUEST (0x1)
|
||||||
|
#define IPX_RIP_RESPONSE (0x2)
|
||||||
|
|
||||||
|
struct ipx_rip_packet
|
||||||
|
{
|
||||||
|
__u16 operation __attribute__((packed));
|
||||||
|
struct ipx_rt_def
|
||||||
|
{
|
||||||
|
__u32 network __attribute__((packed));
|
||||||
|
__u16 hops __attribute__((packed));
|
||||||
|
__u16 ticks __attribute__((packed));
|
||||||
|
}
|
||||||
|
rt[1] __attribute__((packed));
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IPX_BROADCAST_NODE ("\xff\xff\xff\xff\xff\xff")
|
||||||
|
#define IPX_THIS_NODE ("\0\0\0\0\0\0")
|
||||||
|
#define IPX_THIS_NET (0)
|
||||||
|
|
||||||
|
#ifndef IPX_NODE_LEN
|
||||||
|
#define IPX_NODE_LEN (6)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
ipx_print_node(IPXNode node);
|
||||||
|
void
|
||||||
|
ipx_print_network(IPXNet net);
|
||||||
|
void
|
||||||
|
ipx_print_port(IPXPort port);
|
||||||
|
void
|
||||||
|
ipx_print_saddr(struct sockaddr_ipx *sipx);
|
||||||
|
void
|
||||||
|
ipx_fprint_node(FILE * file, IPXNode node);
|
||||||
|
void
|
||||||
|
ipx_fprint_network(FILE * file, IPXNet net);
|
||||||
|
void
|
||||||
|
ipx_fprint_port(FILE * file, IPXPort port);
|
||||||
|
void
|
||||||
|
ipx_fprint_saddr(FILE * file, struct sockaddr_ipx *sipx);
|
||||||
|
int
|
||||||
|
ipx_sscanf_node(char *buf, unsigned char node[IPX_NODE_LEN]);
|
||||||
|
void
|
||||||
|
ipx_assign_node(IPXNode dest, IPXNode src);
|
||||||
|
int
|
||||||
|
ipx_node_equal(IPXNode n1, IPXNode n2);
|
||||||
|
|
||||||
|
#endif /* _IPXLIB_H */
|
||||||
671
include/ncplib.h
Normal file
671
include/ncplib.h
Normal file
@@ -0,0 +1,671 @@
|
|||||||
|
/*
|
||||||
|
* ncplib.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 1995, 1996 by Volker Lendecke
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _NCPLIB_H
|
||||||
|
#define _NCPLIB_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/ncp.h>
|
||||||
|
#include <linux/ncp_fs.h>
|
||||||
|
#include <linux/ipx.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "ipxlib.h"
|
||||||
|
#include "com_err.h"
|
||||||
|
|
||||||
|
typedef __u8 byte;
|
||||||
|
typedef __u16 word;
|
||||||
|
typedef __u32 dword;
|
||||||
|
|
||||||
|
#ifndef memzero
|
||||||
|
#include <string.h>
|
||||||
|
#define memzero(object) memset(&(object), 0, sizeof(object))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BVAL(buf,pos) (((__u8 *)(buf))[pos])
|
||||||
|
#define PVAL(buf,pos) ((unsigned)BVAL(buf,pos))
|
||||||
|
#define BSET(buf,pos,val) (BVAL(buf,pos) = (val))
|
||||||
|
|
||||||
|
static inline word
|
||||||
|
WVAL_HL(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return PVAL(buf, pos) << 8 | PVAL(buf, pos + 1);
|
||||||
|
}
|
||||||
|
static inline dword
|
||||||
|
DVAL_HL(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return WVAL_HL(buf, pos) << 16 | WVAL_HL(buf, pos + 2);
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
WSET_HL(__u8 * buf, int pos, word val)
|
||||||
|
{
|
||||||
|
BSET(buf, pos, val >> 8);
|
||||||
|
BSET(buf, pos + 1, val & 0xff);
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
DSET_HL(__u8 * buf, int pos, dword val)
|
||||||
|
{
|
||||||
|
WSET_HL(buf, pos, val >> 16);
|
||||||
|
WSET_HL(buf, pos + 2, val & 0xffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* we know that the 386 can handle misalignment and has the "right"
|
||||||
|
byteorder */
|
||||||
|
#if defined(__i386__)
|
||||||
|
|
||||||
|
static inline word
|
||||||
|
WVAL_LH(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return *((word *) (buf + pos));
|
||||||
|
}
|
||||||
|
static inline dword
|
||||||
|
DVAL_LH(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return *((dword *) (buf + pos));
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
WSET_LH(__u8 * buf, int pos, word val)
|
||||||
|
{
|
||||||
|
*((word *) (buf + pos)) = val;
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
DSET_LH(__u8 * buf, int pos, dword val)
|
||||||
|
{
|
||||||
|
*((dword *) (buf + pos)) = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline word
|
||||||
|
WVAL_LH(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return PVAL(buf, pos) | PVAL(buf, pos + 1) << 8;
|
||||||
|
}
|
||||||
|
static inline dword
|
||||||
|
DVAL_LH(__u8 * buf, int pos)
|
||||||
|
{
|
||||||
|
return WVAL_LH(buf, pos) | WVAL_LH(buf, pos + 2) << 16;
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
WSET_LH(__u8 * buf, int pos, word val)
|
||||||
|
{
|
||||||
|
BSET(buf, pos, val & 0xff);
|
||||||
|
BSET(buf, pos + 1, val >> 8);
|
||||||
|
}
|
||||||
|
static inline void
|
||||||
|
DSET_LH(__u8 * buf, int pos, dword val)
|
||||||
|
{
|
||||||
|
WSET_LH(buf, pos, val & 0xffff);
|
||||||
|
WSET_LH(buf, pos + 2, val >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
str_upper(char *name);
|
||||||
|
|
||||||
|
enum connect_state
|
||||||
|
{
|
||||||
|
NOT_CONNECTED = 0,
|
||||||
|
CONN_PERMANENT,
|
||||||
|
CONN_TEMPORARY
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_conn
|
||||||
|
{
|
||||||
|
|
||||||
|
enum connect_state is_connected;
|
||||||
|
|
||||||
|
char server[NCP_BINDERY_NAME_LEN];
|
||||||
|
char user[NCP_BINDERY_NAME_LEN];
|
||||||
|
|
||||||
|
struct ncp_fs_info i;
|
||||||
|
|
||||||
|
/* Fields for use with permanent connections */
|
||||||
|
int mount_fid;
|
||||||
|
char mount_point[MAXPATHLEN];
|
||||||
|
|
||||||
|
/* Fields for use with temporary connections */
|
||||||
|
int ncp_sock;
|
||||||
|
int wdog_sock;
|
||||||
|
int wdog_pid;
|
||||||
|
__u8 sequence;
|
||||||
|
int completion;
|
||||||
|
int conn_status;
|
||||||
|
int reply_size;
|
||||||
|
|
||||||
|
/* Fields used to setup ncp requests */
|
||||||
|
int current_size;
|
||||||
|
int has_subfunction;
|
||||||
|
int verbose;
|
||||||
|
int ncp_reply_size;
|
||||||
|
|
||||||
|
int lock;
|
||||||
|
|
||||||
|
char packet[NCP_PACKET_SIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_conn_spec
|
||||||
|
{
|
||||||
|
char server[NCP_BINDERY_NAME_LEN];
|
||||||
|
char user[NCP_BINDERY_NAME_LEN];
|
||||||
|
uid_t uid;
|
||||||
|
int login_type; /* NCP_BINDERY_USER / NCP_BINDERY_PSERVER */
|
||||||
|
char password[NCP_BINDERY_NAME_LEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_search_seq
|
||||||
|
{
|
||||||
|
struct nw_search_sequence s;
|
||||||
|
int namespace;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_property_info
|
||||||
|
{
|
||||||
|
__u8 property_name[16];
|
||||||
|
__u8 property_flags;
|
||||||
|
__u8 property_security;
|
||||||
|
__u32 search_instance;
|
||||||
|
__u8 value_available_flag;
|
||||||
|
__u8 more_properties_flag;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ncp_initialize is the main entry point for user programs which want
|
||||||
|
to connect to a NetWare Server. It looks for -S, -U, -P and -n in
|
||||||
|
the argument list, opens the connection and removes the arguments
|
||||||
|
from the list. It was designed after the X Windows init
|
||||||
|
functions. */
|
||||||
|
struct ncp_conn *
|
||||||
|
ncp_initialize(int *argc, char **argv,
|
||||||
|
int login_necessary, long *err);
|
||||||
|
|
||||||
|
/* You can login as another object by this procedure. As a first use
|
||||||
|
pserver comes to mind. */
|
||||||
|
struct ncp_conn *
|
||||||
|
ncp_initialize_as(int *argc, char **argv,
|
||||||
|
int login_necessary, int login_type, long *err);
|
||||||
|
|
||||||
|
|
||||||
|
/* Open a connection */
|
||||||
|
struct ncp_conn *
|
||||||
|
ncp_open(const struct ncp_conn_spec *spec, long *err);
|
||||||
|
|
||||||
|
/* Open a connection on an existing mount point */
|
||||||
|
struct ncp_conn *
|
||||||
|
ncp_open_mount(const char *mount_point, long *err);
|
||||||
|
|
||||||
|
/* Find a permanent connection that fits the spec, return NULL if
|
||||||
|
* there is none. */
|
||||||
|
char *
|
||||||
|
ncp_find_permanent(const struct ncp_conn_spec *spec);
|
||||||
|
|
||||||
|
/* Find the address of a file server */
|
||||||
|
struct sockaddr_ipx *
|
||||||
|
ncp_find_fileserver(const char *server_name, long *err);
|
||||||
|
|
||||||
|
/* Find the address of a server */
|
||||||
|
struct sockaddr_ipx *
|
||||||
|
ncp_find_server(const char **server_name, int type, long *err);
|
||||||
|
|
||||||
|
/* Detach from a permanent connection or destroy a temporary
|
||||||
|
connection */
|
||||||
|
long
|
||||||
|
ncp_close(struct ncp_conn *conn);
|
||||||
|
|
||||||
|
/* like getmntent, get_ncp_conn_ent scans /etc/mtab for usable
|
||||||
|
connections */
|
||||||
|
|
||||||
|
struct ncp_conn_ent
|
||||||
|
{
|
||||||
|
char server[NCP_BINDERY_NAME_LEN];
|
||||||
|
char user[NCP_BINDERY_NAME_LEN];
|
||||||
|
uid_t uid;
|
||||||
|
char mount_point[MAXPATHLEN];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_conn_ent *
|
||||||
|
ncp_get_conn_ent(FILE * filep);
|
||||||
|
|
||||||
|
#define NWCLIENT (".nwclient")
|
||||||
|
#define NWC_NOPASSWORD ("-")
|
||||||
|
|
||||||
|
/* find an appropriate connection */
|
||||||
|
|
||||||
|
struct ncp_conn_spec *
|
||||||
|
ncp_find_conn_spec(const char *server, const char *user, const char *password,
|
||||||
|
int login_necessary, uid_t uid, long *err);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_file_server_description_strings(struct ncp_conn *conn,
|
||||||
|
char target[512]);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_file_server_time(struct ncp_conn *conn, time_t * target);
|
||||||
|
long
|
||||||
|
ncp_set_file_server_time(struct ncp_conn *conn, time_t * source);
|
||||||
|
|
||||||
|
struct ncp_file_server_info
|
||||||
|
{
|
||||||
|
__u8 ServerName[48] __attribute__((packed));
|
||||||
|
__u8 FileServiceVersion __attribute__((packed));
|
||||||
|
__u8 FileServiceSubVersion __attribute__((packed));
|
||||||
|
__u16 MaximumServiceConnections __attribute__((packed));
|
||||||
|
__u16 ConnectionsInUse __attribute__((packed));
|
||||||
|
__u16 NumberMountedVolumes __attribute__((packed));
|
||||||
|
__u8 Revision __attribute__((packed));
|
||||||
|
__u8 SFTLevel __attribute__((packed));
|
||||||
|
__u8 TTSLevel __attribute__((packed));
|
||||||
|
__u16 MaxConnectionsEverUsed __attribute__((packed));
|
||||||
|
__u8 AccountVersion __attribute__((packed));
|
||||||
|
__u8 VAPVersion __attribute__((packed));
|
||||||
|
__u8 QueueVersion __attribute__((packed));
|
||||||
|
__u8 PrintVersion __attribute__((packed));
|
||||||
|
__u8 VirtualConsoleVersion __attribute__((packed));
|
||||||
|
__u8 RestrictionLevel __attribute__((packed));
|
||||||
|
__u8 InternetBridge __attribute__((packed));
|
||||||
|
__u8 Reserved[60] __attribute__((packed));
|
||||||
|
};
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_file_server_information(struct ncp_conn *conn,
|
||||||
|
struct ncp_file_server_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_connlist(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
int *returned_no, __u8 conn_numbers[256]);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_stations_logged_info(struct ncp_conn *conn,
|
||||||
|
__u32 connection,
|
||||||
|
struct ncp_bindery_object *target,
|
||||||
|
time_t * login_time);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_internet_address(struct ncp_conn *conn,
|
||||||
|
__u32 connection,
|
||||||
|
struct sockaddr_ipx *target,
|
||||||
|
__u8 * conn_type);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_send_broadcast(struct ncp_conn *conn,
|
||||||
|
__u8 no_conn, const __u8 * connections,
|
||||||
|
const char *message);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_encryption_key(struct ncp_conn *conn,
|
||||||
|
char *target);
|
||||||
|
long
|
||||||
|
ncp_get_bindery_object_id(struct ncp_conn *conn,
|
||||||
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
struct ncp_bindery_object *target);
|
||||||
|
long
|
||||||
|
ncp_get_bindery_object_name(struct ncp_conn *conn,
|
||||||
|
__u32 object_id,
|
||||||
|
struct ncp_bindery_object *target);
|
||||||
|
long
|
||||||
|
ncp_scan_bindery_object(struct ncp_conn *conn,
|
||||||
|
__u32 last_id, __u16 object_type, char *search_string,
|
||||||
|
struct ncp_bindery_object *target);
|
||||||
|
long
|
||||||
|
ncp_create_bindery_object(struct ncp_conn *conn,
|
||||||
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
__u8 object_security,
|
||||||
|
__u8 object_status);
|
||||||
|
long
|
||||||
|
ncp_delete_bindery_object(struct ncp_conn *conn,
|
||||||
|
__u16 object_type,
|
||||||
|
const char *object_name);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_change_object_security(struct ncp_conn *conn,
|
||||||
|
__u16 object_type,
|
||||||
|
const char *object_name,
|
||||||
|
__u8 security);
|
||||||
|
|
||||||
|
struct ncp_station_addr
|
||||||
|
{
|
||||||
|
__u32 NetWork __attribute__((packed));
|
||||||
|
__u8 Node[6] __attribute__((packed));
|
||||||
|
__u16 Socket __attribute__((packed));
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ncp_prop_login_control
|
||||||
|
{
|
||||||
|
__u8 AccountExpireDate[3] __attribute__((packed));
|
||||||
|
__u8 Disabled __attribute__((packed));
|
||||||
|
__u8 PasswordExpireDate[3] __attribute__((packed));
|
||||||
|
__u8 GraceLogins __attribute__((packed));
|
||||||
|
__u16 PasswordExpireInterval __attribute__((packed));
|
||||||
|
__u8 MaxGraceLogins __attribute__((packed));
|
||||||
|
__u8 MinPasswordLength __attribute__((packed));
|
||||||
|
__u16 MaxConnections __attribute__((packed));
|
||||||
|
__u8 ConnectionTimeMask[42] __attribute__((packed));
|
||||||
|
__u8 LastLogin[6] __attribute__((packed));
|
||||||
|
__u8 RestrictionMask __attribute__((packed));
|
||||||
|
__u8 reserved __attribute__((packed));
|
||||||
|
__u32 MaxDiskUsage __attribute__((packed));
|
||||||
|
__u16 BadLoginCount __attribute__((packed));
|
||||||
|
__u32 BadLoginCountDown __attribute__((packed));
|
||||||
|
struct ncp_station_addr LastIntruder __attribute__((packed));
|
||||||
|
};
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_read_property_value(struct ncp_conn *conn,
|
||||||
|
int object_type, const char *object_name,
|
||||||
|
int segment, const char *prop_name,
|
||||||
|
struct nw_property *target);
|
||||||
|
long
|
||||||
|
ncp_scan_property(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
__u32 last_id, char *search_string,
|
||||||
|
struct ncp_property_info *property_info);
|
||||||
|
long
|
||||||
|
ncp_add_object_to_set(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name,
|
||||||
|
__u16 member_type,
|
||||||
|
const char *member_name);
|
||||||
|
long
|
||||||
|
ncp_change_property_security(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name,
|
||||||
|
__u8 property_security);
|
||||||
|
long
|
||||||
|
ncp_create_property(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name,
|
||||||
|
__u8 property_flags, __u8 property_security);
|
||||||
|
long
|
||||||
|
ncp_delete_object_from_set(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name,
|
||||||
|
__u16 member_type,
|
||||||
|
const char *member_name);
|
||||||
|
long
|
||||||
|
ncp_delete_property(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name);
|
||||||
|
long
|
||||||
|
ncp_write_property_value(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const char *property_name,
|
||||||
|
__u8 segment,
|
||||||
|
struct nw_property *property_value);
|
||||||
|
|
||||||
|
/* Bit masks for security flag */
|
||||||
|
#define NCP_SEC_CHECKSUMMING_REQUESTED (1)
|
||||||
|
#define NCP_SEC_SIGNATURE_REQUESTED (2)
|
||||||
|
#define NCP_SEC_COMPLETE_SIGNATURES_REQUESTED (4)
|
||||||
|
#define NCP_SEC_ENCRYPTION_REQUESTED (8)
|
||||||
|
#define NCP_SEC_LIP_DISABLED (128)
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_big_ncp_max_packet_size(struct ncp_conn *conn,
|
||||||
|
__u16 proposed_max_size,
|
||||||
|
__u8 proposed_security_flag,
|
||||||
|
__u16 * accepted_max_size,
|
||||||
|
__u16 * echo_socket,
|
||||||
|
__u8 * accepted_security_flag);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_login_encrypted(struct ncp_conn *conn,
|
||||||
|
const struct ncp_bindery_object *object,
|
||||||
|
const unsigned char *key,
|
||||||
|
const unsigned char *passwd);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_login_unencrypted(struct ncp_conn *conn,
|
||||||
|
__u16 object_type, const char *object_name,
|
||||||
|
const unsigned char *passwd);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_change_login_passwd(struct ncp_conn *conn,
|
||||||
|
const struct ncp_bindery_object *object,
|
||||||
|
const unsigned char *key,
|
||||||
|
const unsigned char *oldpasswd,
|
||||||
|
const unsigned char *newpasswd);
|
||||||
|
|
||||||
|
#define NCP_GRACE_PERIOD (0xdf)
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_login_user(struct ncp_conn *conn,
|
||||||
|
const unsigned char *username,
|
||||||
|
const unsigned char *password);
|
||||||
|
long
|
||||||
|
ncp_get_volume_info_with_number(struct ncp_conn *conn, int n,
|
||||||
|
struct ncp_volume_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_volume_number(struct ncp_conn *conn, const char *name,
|
||||||
|
int *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_file_search_init(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
struct ncp_filesearch_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_file_search_continue(struct ncp_conn *conn,
|
||||||
|
struct ncp_filesearch_info *fsinfo,
|
||||||
|
int attributes, const char *path,
|
||||||
|
struct ncp_file_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_finfo(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path, const char *name,
|
||||||
|
struct ncp_file_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_open_file(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
int attr, int access,
|
||||||
|
struct ncp_file_info *target);
|
||||||
|
long
|
||||||
|
ncp_close_file(struct ncp_conn *conn, const char *file_id);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_create_newfile(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
int attr,
|
||||||
|
struct ncp_file_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_create_file(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
int attr,
|
||||||
|
struct ncp_file_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_erase_file(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
int attr);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_rename_file(struct ncp_conn *conn,
|
||||||
|
int old_handle, const char *old_path,
|
||||||
|
int attr,
|
||||||
|
int new_handle, const char *new_path);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_create_directory(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
int inherit_mask);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_delete_directory(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_rename_directory(struct ncp_conn *conn,
|
||||||
|
int dir_handle,
|
||||||
|
const char *old_path, const char *new_path);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path,
|
||||||
|
__u32 object_id, __u8 rights);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_delete_trustee(struct ncp_conn *conn,
|
||||||
|
int dir_handle, const char *path, __u32 object_id);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_read(struct ncp_conn *conn, const char *file_id,
|
||||||
|
off_t offset, size_t count, char *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_write(struct ncp_conn *conn, const char *file_id,
|
||||||
|
off_t offset, size_t count, const char *source);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_copy_file(struct ncp_conn *conn,
|
||||||
|
const char source_file[6],
|
||||||
|
const char target_file[6],
|
||||||
|
__u32 source_offset,
|
||||||
|
__u32 target_offset,
|
||||||
|
__u32 count,
|
||||||
|
__u32 * copied_count);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_obtain_file_or_subdir_info(struct ncp_conn *conn,
|
||||||
|
__u8 source_ns, __u8 target_ns,
|
||||||
|
__u16 search_attribs, __u32 rim,
|
||||||
|
__u8 vol, __u32 dirent, const char *path,
|
||||||
|
struct nw_info_struct *target);
|
||||||
|
|
||||||
|
#define NCP_PERM_READ (0x001)
|
||||||
|
#define NCP_PERM_WRITE (0x002)
|
||||||
|
#define NCP_PERM_OPEN (0x004)
|
||||||
|
#define NCP_PERM_CREATE (0x008)
|
||||||
|
#define NCP_PERM_DELETE (0x010)
|
||||||
|
#define NCP_PERM_OWNER (0x020)
|
||||||
|
#define NCP_PERM_SEARCH (0x040)
|
||||||
|
#define NCP_PERM_MODIFY (0x080)
|
||||||
|
#define NCP_PERM_SUPER (0x100)
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_eff_directory_rights(struct ncp_conn *conn,
|
||||||
|
__u8 source_ns, __u8 target_ns,
|
||||||
|
__u16 search_attribs,
|
||||||
|
__u8 vol, __u32 dirent, const char *path,
|
||||||
|
__u16 * my_effective_rights);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_do_lookup(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir,
|
||||||
|
char *path, /* may only be one component */
|
||||||
|
struct nw_info_struct *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_modify_file_or_subdir_dos_info(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *file,
|
||||||
|
__u32 info_mask,
|
||||||
|
struct nw_modify_dos_info *info);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_del_file_or_subdir(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir, char *name);
|
||||||
|
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_open_create_file_or_subdir(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir, char *name,
|
||||||
|
int open_create_mode,
|
||||||
|
__u32 create_attributes,
|
||||||
|
int desired_acc_rights,
|
||||||
|
struct nw_file_info *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_initialize_search(struct ncp_conn *conn,
|
||||||
|
const struct nw_info_struct *dir,
|
||||||
|
int namespace,
|
||||||
|
struct ncp_search_seq *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_search_for_file_or_subdir(struct ncp_conn *conn,
|
||||||
|
struct ncp_search_seq *seq,
|
||||||
|
struct nw_info_struct *target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_ren_or_mov_file_or_subdir(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *old_dir, char *old_name,
|
||||||
|
struct nw_info_struct *new_dir, char *new_name);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_create_queue_job_and_file(struct ncp_conn *conn,
|
||||||
|
__u32 queue_id,
|
||||||
|
struct queue_job *job);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_close_file_and_start_job(struct ncp_conn *conn,
|
||||||
|
__u32 queue_id,
|
||||||
|
struct queue_job *job);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_attach_to_queue(struct ncp_conn *conn,
|
||||||
|
__u32 queue_id);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_detach_from_queue(struct ncp_conn *conn,
|
||||||
|
__u32 queue_id);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_service_queue_job(struct ncp_conn *conn, __u32 queue_id, __u16 job_type,
|
||||||
|
struct queue_job *job);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_finish_servicing_job(struct ncp_conn *conn, __u32 queue_id,
|
||||||
|
__u32 job_number, __u32 charge_info);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_abort_servicing_job(struct ncp_conn *conn, __u32 queue_id,
|
||||||
|
__u32 job_number);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_broadcast_message(struct ncp_conn *conn, char message[256]);
|
||||||
|
|
||||||
|
long
|
||||||
|
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)
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_alloc_short_dir_handle(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *dir,
|
||||||
|
__u16 alloc_mode,
|
||||||
|
__u8 * target);
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_get_effective_dir_rights(struct ncp_conn *conn,
|
||||||
|
struct nw_info_struct *file,
|
||||||
|
__u16 * target);
|
||||||
|
|
||||||
|
struct ncp_trustee_struct
|
||||||
|
{
|
||||||
|
__u32 object_id;
|
||||||
|
__u16 rights;
|
||||||
|
};
|
||||||
|
|
||||||
|
long
|
||||||
|
ncp_add_trustee_set(struct ncp_conn *conn,
|
||||||
|
__u8 volume_number, __u32 dir_entry,
|
||||||
|
__u16 rights_mask,
|
||||||
|
int object_count, struct ncp_trustee_struct *rights);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _NCPLIB_H */
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
@@ -1,30 +1,19 @@
|
|||||||
CFLAGS = -O2 -Wall
|
CFLAGS = -O2 -Wall
|
||||||
UTILS = $(INTERM_BINDIR)/ipx_configure $(INTERM_BINDIR)/ipx_interface \
|
UTILS = ipx_configure ipx_interface ipx_internal_net ipx_route
|
||||||
$(INTERM_BINDIR)/ipx_internal_net $(INTERM_BINDIR)/ipx_route
|
|
||||||
|
|
||||||
all: $(UTILS)
|
all: $(UTILS)
|
||||||
|
|
||||||
$(INTERM_BINDIR)/ipx_configure: ipx_configure.o
|
|
||||||
$(CC) -o $(INTERM_BINDIR)/ipx_configure ipx_configure.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
|
|
||||||
$(CC) -o $(INTERM_BINDIR)/ipx_internal_net ipx_internal_net.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
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(UTILS) *.o rip sap ipxrcv ipxsend
|
rm -f $(UTILS) *.o rip sap ipxrcv ipxsend
|
||||||
|
|
||||||
|
mrproper: clean
|
||||||
|
rm -f .depend
|
||||||
|
|
||||||
install: $(UTILS)
|
install: $(UTILS)
|
||||||
for i in $(UTILS); \
|
for i in $(UTILS); \
|
||||||
do \
|
do \
|
||||||
install $$i $(BINDIR); \
|
install $$i $(BINDIR); \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
{ "auto_primary", required_argument, NULL, 1 },
|
{ "auto_primary", required_argument, NULL, 1 },
|
||||||
@@ -66,8 +67,14 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
|
int old_errno = errno;
|
||||||
sprintf(errmsg, "%s: socket", progname);
|
sprintf(errmsg, "%s: socket", progname);
|
||||||
perror(errmsg);
|
perror(errmsg);
|
||||||
|
if (old_errno == -EINVAL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Probably you have no IPX support in "
|
||||||
|
"your kernel\n");
|
||||||
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
static struct ifreq id;
|
static struct ifreq id;
|
||||||
static char *progname;
|
static char *progname;
|
||||||
@@ -118,8 +119,14 @@ ipx_add_interface(int argc, char **argv)
|
|||||||
|
|
||||||
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
s = socket(AF_IPX, SOCK_DGRAM, AF_IPX);
|
||||||
if (s < 0) {
|
if (s < 0) {
|
||||||
|
int old_errno = errno;
|
||||||
sprintf(errmsg, "%s: socket", progname);
|
sprintf(errmsg, "%s: socket", progname);
|
||||||
perror(errmsg);
|
perror(errmsg);
|
||||||
|
if (old_errno == -EINVAL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Probably you have no IPX support in "
|
||||||
|
"your kernel\n");
|
||||||
|
}
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ handle_frame (unsigned char *buf, int length, struct sockaddr *saddr)
|
|||||||
switch( packet_type )
|
switch( packet_type )
|
||||||
{
|
{
|
||||||
case __constant_ntohs(ETH_P_IPX):
|
case __constant_ntohs(ETH_P_IPX):
|
||||||
handle_ipx("EtherII ", &(buf[sizeof(struct ethhdr)]));
|
handle_ipx("EtherII", &(buf[sizeof(struct ethhdr)]));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
handle_other(buf, length, saddr);
|
handle_other(buf, length, saddr);
|
||||||
|
|||||||
@@ -89,10 +89,31 @@ struct ncp_reply_header {
|
|||||||
__u8 data[0] __attribute__ ((packed));
|
__u8 data[0] __attribute__ ((packed));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define NCP_BURST_PACKET (0x7777)
|
||||||
|
|
||||||
|
struct ncp_burst_header {
|
||||||
|
__u16 type __attribute__ ((packed));
|
||||||
|
__u8 system_flags __attribute__ ((packed));
|
||||||
|
__u8 stream_type __attribute__ ((packed));
|
||||||
|
__u32 source_conn __attribute__ ((packed));
|
||||||
|
__u32 dest_conn __attribute__ ((packed));
|
||||||
|
__u32 packet_sequence __attribute__ ((packed));
|
||||||
|
__u32 send_delay __attribute__ ((packed));
|
||||||
|
__u16 burst_sequence __attribute__ ((packed));
|
||||||
|
__u16 ack_sequence __attribute__ ((packed));
|
||||||
|
__u32 burst_length __attribute__ ((packed));
|
||||||
|
__u32 data_offset __attribute__ ((packed));
|
||||||
|
__u16 data_bytes __attribute__ ((packed));
|
||||||
|
__u16 missing_frags __attribute__ ((packed));
|
||||||
|
};
|
||||||
|
|
||||||
void handle_ipx (unsigned char *buf, int length, char *frame, int no);
|
void handle_ipx (unsigned char *buf, int length, char *frame, int no);
|
||||||
void handle_ncp (struct sockaddr_ipx *source,
|
void handle_ncp (struct sockaddr_ipx *source,
|
||||||
struct sockaddr_ipx *target,
|
struct sockaddr_ipx *target,
|
||||||
unsigned char *buf, int length, int no);
|
unsigned char *buf, int length, int no);
|
||||||
|
int handle_burst(struct sockaddr_ipx *source,
|
||||||
|
struct sockaddr_ipx *target,
|
||||||
|
unsigned char *buf, int length, int no);
|
||||||
|
|
||||||
#define SAP_MAX_SERVER_NAME_LENGTH 48 /* in network packets */
|
#define SAP_MAX_SERVER_NAME_LENGTH 48 /* in network packets */
|
||||||
#define SAP_MAX_SAPS_PER_PACKET 7
|
#define SAP_MAX_SAPS_PER_PACKET 7
|
||||||
@@ -165,6 +186,12 @@ handle_ipx (unsigned char *buf, int length, char *frame, int no)
|
|||||||
ipx_print_saddr(&d_addr);
|
ipx_print_saddr(&d_addr);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
if (handle_burst(&s_addr, &d_addr, buf + sizeof(struct ipx_packet),
|
||||||
|
length - sizeof(struct ipx_packet), no) != 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( (ntohs(s_addr.sipx_port) == 0x451)
|
if ( (ntohs(s_addr.sipx_port) == 0x451)
|
||||||
|| (ntohs(d_addr.sipx_port) == 0x451))
|
|| (ntohs(d_addr.sipx_port) == 0x451))
|
||||||
{
|
{
|
||||||
@@ -253,9 +280,59 @@ handle_ipx (unsigned char *buf, int length, char *frame, int no)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_ncp (struct sockaddr_ipx *source,
|
int handle_burst(struct sockaddr_ipx *source,
|
||||||
struct sockaddr_ipx *target,
|
struct sockaddr_ipx *target,
|
||||||
unsigned char *buf, int length, int no)
|
unsigned char *buf, int length, int no)
|
||||||
|
{
|
||||||
|
struct ncp_burst_header *rq = (struct ncp_burst_header *)buf;
|
||||||
|
|
||||||
|
if (rq->type != NCP_BURST_PACKET)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Burst Packet\n");
|
||||||
|
printf("Stream Type: %02X, System Flags: %02X\n",
|
||||||
|
rq->stream_type, rq->system_flags);
|
||||||
|
printf("Source Conn: %08X, Dest Conn: %08X, Packet Seq: %08X\n",
|
||||||
|
rq->source_conn, rq->dest_conn,
|
||||||
|
(unsigned int)ntohl(rq->packet_sequence));
|
||||||
|
printf("Send Delay: %08X, Burst Seq: %04X, Ack Seq: %04X\n",
|
||||||
|
(unsigned int)ntohl(rq->send_delay), ntohs(rq->burst_sequence),
|
||||||
|
ntohs(rq->ack_sequence));
|
||||||
|
printf("Burst Length: %08X\n", (unsigned int)ntohl(rq->burst_length));
|
||||||
|
printf("Data Offset: %08X, Data Bytes: %04X, Missing Frags: %04X\n",
|
||||||
|
(unsigned int)ntohl(rq->data_offset), ntohs(rq->data_bytes),
|
||||||
|
ntohs(rq->missing_frags));
|
||||||
|
|
||||||
|
if (ntohs(rq->data_bytes) == 24)
|
||||||
|
{
|
||||||
|
struct ncp_burst_request
|
||||||
|
{
|
||||||
|
struct ncp_burst_header h __attribute__ ((packed));
|
||||||
|
__u32 function __attribute__ ((packed));
|
||||||
|
__u32 file_handle __attribute__ ((packed));
|
||||||
|
__u8 reserved[8] __attribute__ ((packed));
|
||||||
|
__u32 file_offset __attribute__ ((packed));
|
||||||
|
__u32 number_of_bytes __attribute__ ((packed));
|
||||||
|
} *brq = (struct ncp_burst_request *)rq;
|
||||||
|
|
||||||
|
printf("Assuming Burst Request:\n");
|
||||||
|
printf("%s: Handle %08X, Offset %08X, Bytes %08X\n",
|
||||||
|
brq->function == 1 ? "Read " : "Write",
|
||||||
|
brq->file_handle,
|
||||||
|
(unsigned int)ntohl(brq->file_offset),
|
||||||
|
(unsigned int)ntohl(brq->number_of_bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
handle_ncp(struct sockaddr_ipx *source,
|
||||||
|
struct sockaddr_ipx *target,
|
||||||
|
unsigned char *buf, int length, int no)
|
||||||
{
|
{
|
||||||
struct ncp_request_header *rq = (struct ncp_request_header *)buf;
|
struct ncp_request_header *rq = (struct ncp_request_header *)buf;
|
||||||
struct ncp_reply_header *rs = (struct ncp_reply_header *)buf;
|
struct ncp_reply_header *rs = (struct ncp_reply_header *)buf;
|
||||||
@@ -263,6 +340,10 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
int data_length = 0;
|
int data_length = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
static struct sockaddr_ipx request_source;
|
||||||
|
static struct ncp_request_header request_header;
|
||||||
|
static char request_data[5];
|
||||||
|
|
||||||
if (ntohs(rq->type) == NCP_REQUEST)
|
if (ntohs(rq->type) == NCP_REQUEST)
|
||||||
{
|
{
|
||||||
/* Request */
|
/* Request */
|
||||||
@@ -270,11 +351,207 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
rq->conn_low + 256 * rq->conn_high,
|
rq->conn_low + 256 * rq->conn_high,
|
||||||
rq->sequence, rq->task);
|
rq->sequence, rq->task);
|
||||||
|
|
||||||
|
memcpy(&request_source, source, sizeof(request_source));
|
||||||
|
memcpy(&request_header, rq, sizeof(request_header));
|
||||||
|
memcpy(request_data, rq+1, sizeof(request_data));
|
||||||
|
|
||||||
data = buf + sizeof(struct ncp_request_header);
|
data = buf + sizeof(struct ncp_request_header);
|
||||||
data_length = length - sizeof(struct ncp_request_header);
|
data_length = length - sizeof(struct ncp_request_header);
|
||||||
|
|
||||||
switch(rq->function)
|
switch(rq->function)
|
||||||
{
|
{
|
||||||
|
case 18:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Get Volume Info with Number\n");
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Get File Server Date and Time\n");
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
printf("fn: %-3d, subfn: %-3d\n",
|
||||||
|
rq->function, data[2]);
|
||||||
|
switch(data[2])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
printf("Send Broadcast Message\n");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
printf("Get Broadcast Message\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
data += 3;
|
||||||
|
data_length -= 3;
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
printf("fn: %-3d, subfn: %-3d\n",
|
||||||
|
rq->function, data[2]);
|
||||||
|
switch(data[2])
|
||||||
|
{
|
||||||
|
case 00:
|
||||||
|
printf("Set Directory Handle\n");
|
||||||
|
break;
|
||||||
|
case 01:
|
||||||
|
printf("Get Directory Path\n");
|
||||||
|
break;
|
||||||
|
case 02:
|
||||||
|
printf("Scan Directory Information\n");
|
||||||
|
break;
|
||||||
|
case 03:
|
||||||
|
printf("Get Effective Directory Rights\n");
|
||||||
|
break;
|
||||||
|
case 05:
|
||||||
|
printf("Get Volume Number\n");
|
||||||
|
break;
|
||||||
|
case 06:
|
||||||
|
printf("Get Volume Name\n");
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
printf("Create directory\n");
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
printf("Allocate Permanent Dir Handle\n");
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
printf("Deallocate Directory Handle\n");
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
printf("Get Volume Info with handle\n");
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
printf("Add ext. Trustee to Dir or File\n");
|
||||||
|
break;
|
||||||
|
case 48:
|
||||||
|
printf("Get Name Space Directory Entry\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
data += 3;
|
||||||
|
data_length -= 3;
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
||||||
|
data[2]);
|
||||||
|
switch(data[2])
|
||||||
|
{
|
||||||
|
case 17:
|
||||||
|
printf("Get Fileserver Information\n");
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
printf("Get Station's logged Info (old)\n");
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
printf("Get Crypt Key\n");
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
printf("Encrypted Login\n");
|
||||||
|
break;
|
||||||
|
case 28:
|
||||||
|
printf("Get Connection Information\n");
|
||||||
|
break;
|
||||||
|
case 50:
|
||||||
|
printf("Create Bindery Object\n");
|
||||||
|
break;
|
||||||
|
case 53:
|
||||||
|
printf("Get Bindery Object ID\n");
|
||||||
|
break;
|
||||||
|
case 54:
|
||||||
|
printf("Get Bindery Object Name\n");
|
||||||
|
break;
|
||||||
|
case 55:
|
||||||
|
printf("Scan Bindery Object\n");
|
||||||
|
break;
|
||||||
|
case 57:
|
||||||
|
printf("Create Property\n");
|
||||||
|
break;
|
||||||
|
case 59:
|
||||||
|
printf("Change Property Security\n");
|
||||||
|
break;
|
||||||
|
case 60:
|
||||||
|
printf("Scan Property\n");
|
||||||
|
break;
|
||||||
|
case 61:
|
||||||
|
printf("Read Property Value\n");
|
||||||
|
break;
|
||||||
|
case 62:
|
||||||
|
printf("Write Property Value\n");
|
||||||
|
break;
|
||||||
|
case 65:
|
||||||
|
printf("Add Bindery Object to Set\n");
|
||||||
|
break;
|
||||||
|
case 67:
|
||||||
|
printf("Is Bindery Object in Set\n");
|
||||||
|
break;
|
||||||
|
case 70:
|
||||||
|
printf("Get Bindery Access Level\n");
|
||||||
|
break;
|
||||||
|
case 72:
|
||||||
|
printf("Get Bindery Object Access Level\n");
|
||||||
|
break;
|
||||||
|
case 75:
|
||||||
|
printf("Keyed change password\n");
|
||||||
|
break;
|
||||||
|
case 113:
|
||||||
|
printf("Service Queue Job (old)\n");
|
||||||
|
break;
|
||||||
|
case 124:
|
||||||
|
printf("Service Queue Job \n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
data += 3;
|
||||||
|
data_length -= 3;
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("End of Job\n");
|
||||||
|
break;
|
||||||
|
case 33:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Negotiate Buffer size\n");
|
||||||
|
break;
|
||||||
|
case 34:
|
||||||
|
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
||||||
|
data[2]);
|
||||||
|
data += 3;
|
||||||
|
data_length -= 3;
|
||||||
|
break;
|
||||||
|
case 62:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("File Search Initialize\n");
|
||||||
|
break;
|
||||||
|
case 63:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("File Search Continue\n");
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Search for a file\n");
|
||||||
|
break;
|
||||||
|
case 66:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Close File\n");
|
||||||
|
break;
|
||||||
|
case 67:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Create File\n");
|
||||||
|
break;
|
||||||
|
case 72:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Read from File\n");
|
||||||
|
break;
|
||||||
|
case 73:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Write to File\n");
|
||||||
|
break;
|
||||||
|
case 75:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Set File Time Date Stamp\n");
|
||||||
|
break;
|
||||||
|
case 76:
|
||||||
|
printf("fn: %-3d\n", rq->function);
|
||||||
|
printf("Open File (old)\n");
|
||||||
|
break;
|
||||||
|
|
||||||
case 87:
|
case 87:
|
||||||
printf("fn: %-3d, subfn: %-3d\n",
|
printf("fn: %-3d, subfn: %-3d\n",
|
||||||
rq->function, data[0]);
|
rq->function, data[0]);
|
||||||
@@ -307,90 +584,351 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
case 8:
|
case 8:
|
||||||
printf("Delete a File Or Subdirectory\n");
|
printf("Delete a File Or Subdirectory\n");
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
printf("Allocate Short Directory Handle\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
data += 1;
|
data += 1;
|
||||||
data_length -= 1;
|
data_length -= 1;
|
||||||
break;
|
break;
|
||||||
case 21:
|
case 97:
|
||||||
printf("fn: %-3d, subfn: %-3d\n",
|
{
|
||||||
rq->function, data[2]);
|
struct INPUT
|
||||||
switch(data[2])
|
|
||||||
{
|
{
|
||||||
case 0:
|
__u16 proposed_max_size;
|
||||||
printf("Send Broadcast Message\n");
|
__u8 security_flag;
|
||||||
break;
|
} *i = (struct INPUT *)data;
|
||||||
case 1:
|
|
||||||
printf("Get Broadcast Message\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
data += 3;
|
|
||||||
data_length -= 3;
|
|
||||||
break;
|
|
||||||
case 22:
|
|
||||||
printf("fn: %-3d, subfn: %-3d\n",
|
|
||||||
rq->function, data[2]);
|
|
||||||
switch(data[2])
|
|
||||||
{
|
|
||||||
case 21:
|
|
||||||
printf("Get Volume Info with handle\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
data += 3;
|
|
||||||
data_length -= 3;
|
|
||||||
break;
|
|
||||||
case 23:
|
|
||||||
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
|
||||||
data[2]);
|
|
||||||
switch(data[2])
|
|
||||||
{
|
|
||||||
case 17:
|
|
||||||
printf("Get Fileserver Information\n");
|
|
||||||
break;
|
|
||||||
case 28:
|
|
||||||
printf("Get Connection Information\n");
|
|
||||||
break;
|
|
||||||
case 55:
|
|
||||||
printf("Scan Bindery Object\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
data += 3;
|
|
||||||
data_length -= 3;
|
|
||||||
break;
|
|
||||||
case 24:
|
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("fn: %-3d\n", rq->function);
|
||||||
printf("End of Job\n");
|
printf("Get Big Packet NCP Max Packet Size\n");
|
||||||
|
printf("proposed_max_size: %x\n",
|
||||||
|
ntohs(i->proposed_max_size));
|
||||||
|
printf("security_flag: %x\n",
|
||||||
|
i->security_flag);
|
||||||
break;
|
break;
|
||||||
case 34:
|
}
|
||||||
printf("fn: %-3d, subfn: %-3d\n", rq->function,
|
case 101:
|
||||||
data[2]);
|
{
|
||||||
data += 3;
|
struct INPUT
|
||||||
data_length -= 3;
|
{
|
||||||
break;
|
__u32 local_conn_id;
|
||||||
case 62:
|
__u32 local_max_packet_size;
|
||||||
|
__u16 local_target_socket;
|
||||||
|
__u32 local_max_send_size;
|
||||||
|
__u32 local_max_recv_size;
|
||||||
|
} *i = (struct INPUT *)data;
|
||||||
|
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("fn: %-3d\n", rq->function);
|
||||||
printf("File Search Initialize\n");
|
printf("Packet Burst Connection Request\n");
|
||||||
break;
|
printf("local_conn_id: %lx\n",
|
||||||
case 63:
|
ntohl(i->local_conn_id));
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("local_max_packet_size: %lx\n",
|
||||||
printf("File Search Continue\n");
|
ntohl(i->local_max_packet_size));
|
||||||
break;
|
printf("local_target_socket: %lx\n",
|
||||||
case 64:
|
ntohl(i->local_target_socket));
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("local_max_send_size: %lx\n",
|
||||||
printf("Search for a file\n");
|
ntohl(i->local_max_send_size));
|
||||||
break;
|
printf("local_max_recv_size: %lx\n",
|
||||||
case 66:
|
ntohl(i->local_max_recv_size));
|
||||||
printf("fn: %-3d\n", rq->function);
|
}
|
||||||
printf("Close File\n");
|
|
||||||
break;
|
|
||||||
case 73:
|
|
||||||
printf("fn: %-3d\n", rq->function);
|
|
||||||
printf("Write to File\n");
|
|
||||||
break;
|
|
||||||
case 75:
|
|
||||||
printf("fn: %-3d\n", rq->function);
|
|
||||||
printf("Set File Time Date Stamp\n");
|
|
||||||
break;
|
break;
|
||||||
|
case 104:
|
||||||
|
{
|
||||||
|
printf("fn: %-3d, subfn: %-3d, NDS call\n",
|
||||||
|
rq->function, data[0]);
|
||||||
|
|
||||||
|
/* I took this information from the (german!!)
|
||||||
|
book 'Einf"uhrung in die NetWare LAN
|
||||||
|
Analyse', Laura A. Chappell, Dan E. Hakes,
|
||||||
|
Novell Press, Markt & Technik, ISBN
|
||||||
|
3-8272-5084-6, and from the book mentioned
|
||||||
|
in the ncpfs README. I'm not sure it is
|
||||||
|
correct, because I do not have NW 4.x. If
|
||||||
|
you have the time, could you watch a NW4
|
||||||
|
workstation, and tell me whether anything
|
||||||
|
of this makes sense at all. */
|
||||||
|
|
||||||
|
switch(data[0])
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("Ping for NDS\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
struct INPUT
|
||||||
|
{
|
||||||
|
__u8 subfunction_code;
|
||||||
|
__u32 fragger_handle;
|
||||||
|
__u32 max_fragment_size;
|
||||||
|
__u32 message_size;
|
||||||
|
__u32 fragment_flag;
|
||||||
|
__u32 verb;
|
||||||
|
} *i = (struct INPUT *)data;
|
||||||
|
printf("Send NDS Fragment Request/Reply\n");
|
||||||
|
printf("fragger_handle: %lx\n",
|
||||||
|
(unsigned long)i->fragger_handle);
|
||||||
|
printf("max_fragment_size: %lx\n",
|
||||||
|
(unsigned long)i->max_fragment_size);
|
||||||
|
printf("message_size: %lx\n",
|
||||||
|
(unsigned long)i->message_size);
|
||||||
|
printf("fragment_flag: %lx\n",
|
||||||
|
(unsigned long)i->fragment_flag);
|
||||||
|
printf("verb: %d\n", i->verb);
|
||||||
|
|
||||||
|
switch (i->verb)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
printf("Resolve Name\n");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printf("Read Entry Information\n");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
printf("Read\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("Compare\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("List\n");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
printf("Search Entries\n");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
printf("Add Entry\n");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
printf("Remove Entry\n");
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
printf("Modify Entry\n");
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
printf("Modify RDN\n");
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
printf("Create Attribute\n");
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
printf("Read Attribute Definition\n");
|
||||||
|
break;
|
||||||
|
case 13:
|
||||||
|
printf("Remove Attribute Definition\n");
|
||||||
|
break;
|
||||||
|
case 14:
|
||||||
|
printf("Define Class\n");
|
||||||
|
break;
|
||||||
|
case 15:
|
||||||
|
printf("Read Class Definition\n");
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
printf("Modify Class Definition\n");
|
||||||
|
break;
|
||||||
|
case 17:
|
||||||
|
printf("Remove Class Definition\n");
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
printf("List Containable Classes\n");
|
||||||
|
break;
|
||||||
|
case 19:
|
||||||
|
printf("Get Effective Rights\n");
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
printf("Add Partition\n");
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
printf("Remove Partition\n");
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
printf("List Partitions\n");
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
printf("Split Partition\n");
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
printf("Join Partitions\n");
|
||||||
|
break;
|
||||||
|
case 25:
|
||||||
|
printf("Add Replica\n");
|
||||||
|
break;
|
||||||
|
case 26:
|
||||||
|
printf("Remove Replica\n");
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
printf("Open Stream\n");
|
||||||
|
break;
|
||||||
|
case 28:
|
||||||
|
printf("Search Filter\n");
|
||||||
|
break;
|
||||||
|
case 29:
|
||||||
|
printf("Create Subordinate Reference\n");
|
||||||
|
break;
|
||||||
|
case 30:
|
||||||
|
printf("Link Replica\n");
|
||||||
|
break;
|
||||||
|
case 31:
|
||||||
|
printf("Change Replica Type\n");
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
printf("Start Update Schema\n");
|
||||||
|
break;
|
||||||
|
case 33:
|
||||||
|
printf("End Update Schema\n");
|
||||||
|
break;
|
||||||
|
case 34:
|
||||||
|
printf("Update Schema\n");
|
||||||
|
break;
|
||||||
|
case 35:
|
||||||
|
printf("Start Update Replica\n");
|
||||||
|
break;
|
||||||
|
case 36:
|
||||||
|
printf("End Update Replica\n");
|
||||||
|
break;
|
||||||
|
case 37:
|
||||||
|
printf("Update Replica\n");
|
||||||
|
break;
|
||||||
|
case 38:
|
||||||
|
printf("Synchronize Partition\n");
|
||||||
|
break;
|
||||||
|
case 39:
|
||||||
|
printf("Synchronize Schema\n");
|
||||||
|
break;
|
||||||
|
case 40:
|
||||||
|
printf("Read Syntaxes\n");
|
||||||
|
break;
|
||||||
|
case 41:
|
||||||
|
printf("Get Replica Root ID\n");
|
||||||
|
break;
|
||||||
|
case 42:
|
||||||
|
printf("Begin Move Entry\n");
|
||||||
|
break;
|
||||||
|
case 43:
|
||||||
|
printf("Finish Move Entry\n");
|
||||||
|
break;
|
||||||
|
case 44:
|
||||||
|
printf("Release Moved Entry\n");
|
||||||
|
break;
|
||||||
|
case 45:
|
||||||
|
printf("Backup Entry\n");
|
||||||
|
break;
|
||||||
|
case 46:
|
||||||
|
printf("Restore Entry\n");
|
||||||
|
break;
|
||||||
|
case 47:
|
||||||
|
printf("Save DIB\n");
|
||||||
|
break;
|
||||||
|
case 48:
|
||||||
|
case 49:
|
||||||
|
printf("Unused\n");
|
||||||
|
break;
|
||||||
|
case 50:
|
||||||
|
printf("Close Iteration\n");
|
||||||
|
break;
|
||||||
|
case 51:
|
||||||
|
printf("Unused\n");
|
||||||
|
break;
|
||||||
|
case 52:
|
||||||
|
printf("Audit Skulking\n");
|
||||||
|
break;
|
||||||
|
case 53:
|
||||||
|
printf("Get Server Address\n");
|
||||||
|
break;
|
||||||
|
case 54:
|
||||||
|
printf("Set Keys\n");
|
||||||
|
break;
|
||||||
|
case 55:
|
||||||
|
printf("Change Password\n");
|
||||||
|
break;
|
||||||
|
case 56:
|
||||||
|
printf("Verify Password\n");
|
||||||
|
break;
|
||||||
|
case 57:
|
||||||
|
printf("Begin Login\n");
|
||||||
|
break;
|
||||||
|
case 58:
|
||||||
|
printf("Finish Login\n");
|
||||||
|
break;
|
||||||
|
case 59:
|
||||||
|
printf("Begin Authentication\n");
|
||||||
|
break;
|
||||||
|
case 60:
|
||||||
|
printf("Finish Authentication\n");
|
||||||
|
break;
|
||||||
|
case 61:
|
||||||
|
printf("Logout\n");
|
||||||
|
break;
|
||||||
|
case 62:
|
||||||
|
printf("Repair Ring\n");
|
||||||
|
break;
|
||||||
|
case 63:
|
||||||
|
printf("Repair Timestamps\n");
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
printf("Create Back Link\n");
|
||||||
|
break;
|
||||||
|
case 65:
|
||||||
|
printf("Delete External Reference\n");
|
||||||
|
break;
|
||||||
|
case 66:
|
||||||
|
printf("Rename External Reference\n");
|
||||||
|
break;
|
||||||
|
case 67:
|
||||||
|
printf("Create Directory Entry\n");
|
||||||
|
break;
|
||||||
|
case 68:
|
||||||
|
printf("Remove Directory Entry\n");
|
||||||
|
break;
|
||||||
|
case 69:
|
||||||
|
printf("Designate New Master\n");
|
||||||
|
break;
|
||||||
|
case 70:
|
||||||
|
printf("Change Tree Name\n");
|
||||||
|
break;
|
||||||
|
case 71:
|
||||||
|
printf("Partition Entry Count\n");
|
||||||
|
break;
|
||||||
|
case 72:
|
||||||
|
printf("Check Login Restrictions\n");
|
||||||
|
break;
|
||||||
|
case 73:
|
||||||
|
printf("Start Join\n");
|
||||||
|
break;
|
||||||
|
case 74:
|
||||||
|
printf("Low Level Split\n");
|
||||||
|
break;
|
||||||
|
case 75:
|
||||||
|
printf("Low Level Join\n");
|
||||||
|
break;
|
||||||
|
case 76:
|
||||||
|
printf("Abort Low Level Join\n");
|
||||||
|
break;
|
||||||
|
case 77:
|
||||||
|
printf("Get All Servers\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("Unknown Verb: %d\n",
|
||||||
|
data[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
printf("Close NDS Fragment\n");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
printf("Return Bindery Context\n");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
printf("Monitor NDS connection\n");
|
||||||
|
break;
|
||||||
|
case 200:
|
||||||
|
printf("NDS Auditing\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
printf("fn: %-3d\n", rq->function);
|
printf("fn: %-3d\n", rq->function);
|
||||||
}
|
}
|
||||||
@@ -406,6 +944,70 @@ void handle_ncp (struct sockaddr_ipx *source,
|
|||||||
|
|
||||||
data = buf + sizeof(struct ncp_reply_header);
|
data = buf + sizeof(struct ncp_reply_header);
|
||||||
data_length = length - sizeof(struct ncp_reply_header);
|
data_length = length - sizeof(struct ncp_reply_header);
|
||||||
|
|
||||||
|
if ( (memcmp(&request_source, target,
|
||||||
|
sizeof(request_source)) == 0)
|
||||||
|
&& (request_header.sequence == rs->sequence))
|
||||||
|
{
|
||||||
|
switch (request_header.function)
|
||||||
|
{
|
||||||
|
case 22:
|
||||||
|
switch (request_data[2])
|
||||||
|
{
|
||||||
|
case 18:
|
||||||
|
{
|
||||||
|
struct XDATA
|
||||||
|
{
|
||||||
|
__u8 new_directory_handle;
|
||||||
|
__u8 access_rights_mask;
|
||||||
|
} *x = (struct XDATA *)data;
|
||||||
|
printf("new_directory_handle: %x\n",
|
||||||
|
x->new_directory_handle);
|
||||||
|
printf("access_rights_mask: %x\n",
|
||||||
|
x->access_rights_mask);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 72:
|
||||||
|
printf("Read data\n");
|
||||||
|
data_length = 0;
|
||||||
|
break;
|
||||||
|
case 97:
|
||||||
|
{
|
||||||
|
struct XDATA
|
||||||
|
{
|
||||||
|
__u16 accepted_max_size;
|
||||||
|
__u16 echo_socket;
|
||||||
|
__u8 security_flag;
|
||||||
|
} *x = (struct XDATA *)data;
|
||||||
|
printf("accepted_max_size: %x\n",
|
||||||
|
ntohs(x->accepted_max_size));
|
||||||
|
printf("echo_socket: %x\n",
|
||||||
|
ntohs(x->echo_socket));
|
||||||
|
printf("security_flag: %x\n",
|
||||||
|
(x->security_flag));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 101:
|
||||||
|
{
|
||||||
|
struct XDATA
|
||||||
|
{
|
||||||
|
__u8 completion_code;
|
||||||
|
__u32 remote_target_id;
|
||||||
|
__u32 remote_max_packet_size;
|
||||||
|
} *x = (struct XDATA *)data;
|
||||||
|
printf("completion_code: %x\n",
|
||||||
|
x->completion_code);
|
||||||
|
printf("remote_target_id: %lx\n",
|
||||||
|
ntohl(x->remote_target_id));
|
||||||
|
printf("remote_max_packet_size: %lx\n",
|
||||||
|
ntohl(x->remote_max_packet_size));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
|
|||||||
@@ -116,6 +116,12 @@ struct ncp_file_info {
|
|||||||
__u16 update_time;
|
__u16 update_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Defines for Name Spaces */
|
||||||
|
#define NW_NS_DOS 0
|
||||||
|
#define NW_NS_MAC 1
|
||||||
|
#define NW_NS_NFS 2
|
||||||
|
#define NW_NS_FTAM 3
|
||||||
|
#define NW_NS_OS2 4
|
||||||
|
|
||||||
/* Defines for ReturnInformationMask */
|
/* Defines for ReturnInformationMask */
|
||||||
#define RIM_NAME (0x0001L)
|
#define RIM_NAME (0x0001L)
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ struct ncp_fs_info {
|
|||||||
#define NCP_READDIR_CACHE_SIZE 64
|
#define NCP_READDIR_CACHE_SIZE 64
|
||||||
|
|
||||||
|
|
||||||
#define NCP_MAX_RPC_TIMEOUT (60) /* 6 seconds */
|
#define NCP_MAX_RPC_TIMEOUT (6*HZ)
|
||||||
|
|
||||||
/* Guess, what 0x564c is :-) */
|
/* Guess, what 0x564c is :-) */
|
||||||
#define NCP_SUPER_MAGIC 0x564c
|
#define NCP_SUPER_MAGIC 0x564c
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ struct ncp_server {
|
|||||||
interest for us later, so we store
|
interest for us later, so we store
|
||||||
it completely. */
|
it completely. */
|
||||||
|
|
||||||
|
__u8 name_space[NCP_NUMBER_OF_VOLUMES];
|
||||||
|
|
||||||
struct file *ncp_filp; /* File pointer to ncp socket */
|
struct file *ncp_filp; /* File pointer to ncp socket */
|
||||||
struct file *wdog_filp; /* File pointer to wdog socket */
|
struct file *wdog_filp; /* File pointer to wdog socket */
|
||||||
void *data_ready; /* The wdog socket gets a new
|
void *data_ready; /* The wdog socket gets a new
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/ncp_fs.h>
|
#include <linux/ncp_fs.h>
|
||||||
#include <asm/segment.h>
|
#include <asm/segment.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
|
#include <linux/locks.h>
|
||||||
#include "ncplib_kernel.h"
|
#include "ncplib_kernel.h"
|
||||||
|
|
||||||
struct ncp_dirent {
|
struct ncp_dirent {
|
||||||
@@ -96,6 +97,20 @@ str_lower(char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
ncp_namespace(struct inode *i)
|
||||||
|
{
|
||||||
|
struct ncp_server *server = NCP_SERVER(i);
|
||||||
|
struct nw_info_struct *info = NCP_ISTRUCT(i);
|
||||||
|
return server->name_space[info->volNumber];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
ncp_preserve_case(struct inode *i)
|
||||||
|
{
|
||||||
|
return (ncp_namespace(i) == NW_NS_OS2);
|
||||||
|
}
|
||||||
|
|
||||||
static struct file_operations ncp_dir_operations = {
|
static struct file_operations ncp_dir_operations = {
|
||||||
NULL, /* lseek - default */
|
NULL, /* lseek - default */
|
||||||
ncp_dir_read, /* read - bad */
|
ncp_dir_read, /* read - bad */
|
||||||
@@ -132,7 +147,7 @@ struct inode_operations ncp_dir_inode_operations = {
|
|||||||
/* Here we encapsulate the inode number handling that depends upon the
|
/* Here we encapsulate the inode number handling that depends upon the
|
||||||
* mount mode: When we mount a complete server, the memory address of
|
* mount mode: When we mount a complete server, the memory address of
|
||||||
* the npc_inode_info is used as an inode. When only a single volume
|
* the npc_inode_info is used as an inode. When only a single volume
|
||||||
* is mounted, then the DosDirNum is used as the inode number. As this
|
* is mounted, then the dirEntNum is used as the inode number. As this
|
||||||
* is unique for the complete volume, this should enable the NFS
|
* is unique for the complete volume, this should enable the NFS
|
||||||
* exportability of a ncpfs-mounted volume.
|
* exportability of a ncpfs-mounted volume.
|
||||||
*/
|
*/
|
||||||
@@ -147,7 +162,7 @@ inline ino_t
|
|||||||
ncp_info_ino(struct ncp_server *server, struct ncp_inode_info *info)
|
ncp_info_ino(struct ncp_server *server, struct ncp_inode_info *info)
|
||||||
{
|
{
|
||||||
return ncp_single_volume(server)
|
return ncp_single_volume(server)
|
||||||
? info->finfo.i.DosDirNum : (ino_t)info;
|
? info->finfo.i.dirEntNum : (ino_t)info;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@@ -200,12 +215,30 @@ static int c_size;
|
|||||||
static int c_seen_eof;
|
static int c_seen_eof;
|
||||||
static int c_last_returned_index;
|
static int c_last_returned_index;
|
||||||
static struct ncp_dirent* c_entry = NULL;
|
static struct ncp_dirent* c_entry = NULL;
|
||||||
|
static int c_lock = 0;
|
||||||
|
static struct wait_queue *c_wait = NULL;
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
ncp_lock_dircache(void)
|
||||||
|
{
|
||||||
|
while (c_lock)
|
||||||
|
sleep_on(&c_wait);
|
||||||
|
c_lock = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
ncp_unlock_dircache(void)
|
||||||
|
{
|
||||||
|
c_lock = 0;
|
||||||
|
wake_up(&c_wait);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ncp_readdir(struct inode *inode, struct file *filp,
|
ncp_readdir(struct inode *inode, struct file *filp,
|
||||||
struct dirent *dirent, int count)
|
struct dirent *dirent, int count)
|
||||||
{
|
{
|
||||||
int result, i = 0;
|
int result = 0;
|
||||||
|
int i = 0;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
struct ncp_dirent *entry = NULL;
|
struct ncp_dirent *entry = NULL;
|
||||||
struct ncp_server *server = NCP_SERVER(inode);
|
struct ncp_server *server = NCP_SERVER(inode);
|
||||||
@@ -238,6 +271,7 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ncp_lock_dircache();
|
||||||
if (c_entry == NULL)
|
if (c_entry == NULL)
|
||||||
{
|
{
|
||||||
i = sizeof (struct ncp_dirent) * NCP_READDIR_CACHE_SIZE;
|
i = sizeof (struct ncp_dirent) * NCP_READDIR_CACHE_SIZE;
|
||||||
@@ -245,7 +279,8 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
if (c_entry == NULL)
|
if (c_entry == NULL)
|
||||||
{
|
{
|
||||||
printk("ncp_readdir: no MEMORY for cache\n");
|
printk("ncp_readdir: no MEMORY for cache\n");
|
||||||
return -ENOMEM;
|
result = -ENOMEM;
|
||||||
|
goto finished;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,10 +290,11 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
if (filldir(dirent,".",1, filp->f_pos,
|
if (filldir(dirent,".",1, filp->f_pos,
|
||||||
ncp_info_ino(server, dir)) < 0)
|
ncp_info_ino(server, dir)) < 0)
|
||||||
{
|
{
|
||||||
return 0;
|
goto finished;
|
||||||
}
|
}
|
||||||
filp->f_pos += 1;
|
filp->f_pos += 1;
|
||||||
return ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
result = ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
||||||
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filp->f_pos == 1)
|
if (filp->f_pos == 1)
|
||||||
@@ -266,10 +302,11 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
if (filldir(dirent,"..",2, filp->f_pos,
|
if (filldir(dirent,"..",2, filp->f_pos,
|
||||||
ncp_info_ino(server, dir->dir)) < 0)
|
ncp_info_ino(server, dir->dir)) < 0)
|
||||||
{
|
{
|
||||||
return 0;
|
goto finished;
|
||||||
}
|
}
|
||||||
filp->f_pos += 1;
|
filp->f_pos += 1;
|
||||||
return ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
result = ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
||||||
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((inode->i_dev == c_dev) && (inode->i_ino == c_ino))
|
if ((inode->i_dev == c_dev) && (inode->i_ino == c_ino))
|
||||||
@@ -286,49 +323,54 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
}
|
}
|
||||||
if ((entry == NULL) && c_seen_eof)
|
if ((entry == NULL) && c_seen_eof)
|
||||||
{
|
{
|
||||||
return 0;
|
goto finished;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry == NULL)
|
if (entry == NULL)
|
||||||
{
|
{
|
||||||
|
int entries;
|
||||||
DDPRINTK("ncp_readdir: Not found in cache.\n");
|
DDPRINTK("ncp_readdir: Not found in cache.\n");
|
||||||
|
|
||||||
if (ncp_is_server_root(inode))
|
if (ncp_is_server_root(inode))
|
||||||
{
|
{
|
||||||
result = ncp_read_volume_list(server, filp->f_pos,
|
entries = ncp_read_volume_list(server, filp->f_pos,
|
||||||
NCP_READDIR_CACHE_SIZE);
|
NCP_READDIR_CACHE_SIZE);
|
||||||
DPRINTK("ncp_read_volume_list returned %d\n", result);
|
DPRINTK("ncp_read_volume_list returned %d\n", entries);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = ncp_do_readdir(server, inode, filp->f_pos,
|
entries = ncp_do_readdir(server, inode, filp->f_pos,
|
||||||
NCP_READDIR_CACHE_SIZE,
|
NCP_READDIR_CACHE_SIZE,
|
||||||
c_entry);
|
c_entry);
|
||||||
DPRINTK("ncp_readdir returned %d\n", result);
|
DPRINTK("ncp_readdir returned %d\n", entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result < 0)
|
if (entries < 0)
|
||||||
{
|
{
|
||||||
c_dev = 0;
|
c_dev = 0;
|
||||||
c_ino = 0;
|
c_ino = 0;
|
||||||
return result;
|
result = entries;
|
||||||
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result > 0)
|
if (entries > 0)
|
||||||
{
|
{
|
||||||
c_seen_eof = (result < NCP_READDIR_CACHE_SIZE);
|
c_seen_eof = (entries < NCP_READDIR_CACHE_SIZE);
|
||||||
c_dev = inode->i_dev;
|
c_dev = inode->i_dev;
|
||||||
c_ino = inode->i_ino;
|
c_ino = inode->i_ino;
|
||||||
c_size = result;
|
c_size = entries;
|
||||||
entry = c_entry;
|
entry = c_entry;
|
||||||
c_last_returned_index = 0;
|
c_last_returned_index = 0;
|
||||||
index = 0;
|
index = 0;
|
||||||
|
|
||||||
for (i = 0; i < c_size; i++)
|
if (!ncp_preserve_case(inode))
|
||||||
{
|
{
|
||||||
str_lower(c_entry[i].i.entryName);
|
for (i = 0; i < c_size; i++)
|
||||||
|
{
|
||||||
|
str_lower(c_entry[i].i.entryName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,7 +378,7 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
if (entry == NULL)
|
if (entry == NULL)
|
||||||
{
|
{
|
||||||
/* Nothing found, even from a ncp call */
|
/* Nothing found, even from a ncp call */
|
||||||
return 0;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (index < c_size)
|
if (index < c_size)
|
||||||
@@ -350,7 +392,7 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
|
|
||||||
if (ncp_single_volume(server))
|
if (ncp_single_volume(server))
|
||||||
{
|
{
|
||||||
ino = (ino_t)(entry->i.DosDirNum);
|
ino = (ino_t)(entry->i.dirEntNum);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -374,15 +416,18 @@ ncp_readdir(struct inode *inode, struct file *filp,
|
|||||||
if (filldir(dirent, entry->i.entryName, entry->i.nameLen,
|
if (filldir(dirent, entry->i.entryName, entry->i.nameLen,
|
||||||
entry->f_pos, ino) < 0)
|
entry->f_pos, ino) < 0)
|
||||||
{
|
{
|
||||||
return 0;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
|
||||||
filp->f_pos += 1;
|
filp->f_pos += 1;
|
||||||
index += 1;
|
index += 1;
|
||||||
entry += 1;
|
entry += 1;
|
||||||
return ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
result = ROUND_UP(NAME_OFFSET(dirent)+i+1);
|
||||||
|
goto finished;
|
||||||
}
|
}
|
||||||
return 0;
|
finished:
|
||||||
|
ncp_unlock_dircache();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -407,7 +452,7 @@ ncp_read_volume_list(struct ncp_server *server, int fpos, int cache_size)
|
|||||||
|
|
||||||
if (ncp_get_volume_info_with_number(server, i, &info) != 0)
|
if (ncp_get_volume_info_with_number(server, i, &info) != 0)
|
||||||
{
|
{
|
||||||
return total_count;
|
return (total_count - fpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(info.volume_name) > 0)
|
if (strlen(info.volume_name) > 0)
|
||||||
@@ -643,7 +688,7 @@ ncp_init_root(struct ncp_server *server)
|
|||||||
root->finfo.opened = 0;
|
root->finfo.opened = 0;
|
||||||
i->attributes = aDIR;
|
i->attributes = aDIR;
|
||||||
i->dataStreamSize = 1024;
|
i->dataStreamSize = 1024;
|
||||||
i->DosDirNum = 0;
|
i->dirEntNum = i->DosDirNum = 0;
|
||||||
i->volNumber = NCP_NUMBER_OF_VOLUMES+1; /* illegal volnum */
|
i->volNumber = NCP_NUMBER_OF_VOLUMES+1; /* illegal volnum */
|
||||||
ncp_date_unix2dos(0, &(i->creationTime), &(i->creationDate));
|
ncp_date_unix2dos(0, &(i->creationTime), &(i->creationDate));
|
||||||
ncp_date_unix2dos(0, &(i->modifyTime), &(i->modifyDate));
|
ncp_date_unix2dos(0, &(i->modifyTime), &(i->modifyDate));
|
||||||
@@ -720,7 +765,7 @@ ncp_find_dir_inode(struct inode *dir, const char *name)
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( (result->dir->finfo.i.DosDirNum == dir_info->DosDirNum)
|
if ( (result->dir->finfo.i.dirEntNum == dir_info->dirEntNum)
|
||||||
&& (result->dir->finfo.i.volNumber == dir_info->volNumber)
|
&& (result->dir->finfo.i.volNumber == dir_info->volNumber)
|
||||||
&& (strcmp(result->finfo.i.entryName, name) == 0)
|
&& (strcmp(result->finfo.i.entryName, name) == 0)
|
||||||
/* The root dir is never looked up using this
|
/* The root dir is never looked up using this
|
||||||
@@ -748,7 +793,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
struct ncp_server *server;
|
struct ncp_server *server;
|
||||||
struct ncp_inode_info *result_info;
|
struct ncp_inode_info *result_info;
|
||||||
int found_in_cache;
|
int found_in_cache;
|
||||||
|
int down_case = 0;
|
||||||
char name[len+1];
|
char name[len+1];
|
||||||
|
|
||||||
*result = NULL;
|
*result = NULL;
|
||||||
@@ -800,7 +845,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
|
|
||||||
memcpy(name, __name, len);
|
memcpy(name, __name, len);
|
||||||
name[len] = 0;
|
name[len] = 0;
|
||||||
|
lock_super(dir->i_sb);
|
||||||
result_info = ncp_find_dir_inode(dir, name);
|
result_info = ncp_find_dir_inode(dir, name);
|
||||||
|
|
||||||
if (result_info != 0)
|
if (result_info != 0)
|
||||||
@@ -814,6 +859,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
inode number */
|
inode number */
|
||||||
|
|
||||||
*result = iget(dir->i_sb, ncp_info_ino(server, result_info));
|
*result = iget(dir->i_sb, ncp_info_ino(server, result_info));
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
|
|
||||||
if (*result == NULL)
|
if (*result == NULL)
|
||||||
@@ -829,6 +875,8 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
|
|
||||||
found_in_cache = 0;
|
found_in_cache = 0;
|
||||||
|
|
||||||
|
ncp_lock_dircache();
|
||||||
|
|
||||||
if ((dir->i_dev == c_dev) && (dir->i_ino == c_ino))
|
if ((dir->i_dev == c_dev) && (dir->i_ino == c_ino))
|
||||||
{
|
{
|
||||||
int first = c_last_returned_index;
|
int first = c_last_returned_index;
|
||||||
@@ -851,42 +899,56 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
}
|
}
|
||||||
while (i != first);
|
while (i != first);
|
||||||
}
|
}
|
||||||
|
ncp_unlock_dircache();
|
||||||
|
|
||||||
if (found_in_cache == 0)
|
if (found_in_cache == 0)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
str_upper(name);
|
|
||||||
|
|
||||||
DDPRINTK("ncp_lookup: do_lookup on %s/%s\n",
|
DDPRINTK("ncp_lookup: do_lookup on %s/%s\n",
|
||||||
NCP_ISTRUCT(dir)->entryName, name);
|
NCP_ISTRUCT(dir)->entryName, name);
|
||||||
|
|
||||||
if (ncp_is_server_root(dir))
|
if (ncp_is_server_root(dir))
|
||||||
{
|
{
|
||||||
|
str_upper(name);
|
||||||
|
down_case = 1;
|
||||||
res = ncp_lookup_volume(server, name, &(finfo.i));
|
res = ncp_lookup_volume(server, name, &(finfo.i));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_upper(name);
|
||||||
|
down_case = 1;
|
||||||
|
}
|
||||||
res = ncp_obtain_info(server,
|
res = ncp_obtain_info(server,
|
||||||
NCP_ISTRUCT(dir)->volNumber,
|
NCP_ISTRUCT(dir)->volNumber,
|
||||||
NCP_ISTRUCT(dir)->DosDirNum,
|
NCP_ISTRUCT(dir)->dirEntNum,
|
||||||
name, &(finfo.i));
|
name, &(finfo.i));
|
||||||
}
|
}
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
finfo.opened = 0;
|
finfo.opened = 0;
|
||||||
str_lower(finfo.i.entryName);
|
|
||||||
|
if (down_case != 0)
|
||||||
|
{
|
||||||
|
str_lower(finfo.i.entryName);
|
||||||
|
}
|
||||||
|
|
||||||
if (!(*result = ncp_iget(dir, &finfo)))
|
if (!(*result = ncp_iget(dir, &finfo)))
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -914,8 +976,13 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
|
|
||||||
strncpy(_name, name, len);
|
strncpy(_name, name, len);
|
||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
|
||||||
|
|
||||||
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_upper(_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
lock_super(dir->i_sb);
|
||||||
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|
|
||||||
@@ -923,22 +990,29 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
0, AR_READ|AR_WRITE,
|
0, AR_READ|AR_WRITE,
|
||||||
&finfo) != 0)
|
&finfo) != 0)
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EACCES;
|
return -EACCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
ncp_invalid_dir_cache(dir);
|
ncp_invalid_dir_cache(dir);
|
||||||
|
|
||||||
str_lower(finfo.i.entryName);
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_lower(finfo.i.entryName);
|
||||||
|
}
|
||||||
|
|
||||||
finfo.access = O_RDWR;
|
finfo.access = O_RDWR;
|
||||||
|
|
||||||
if (!(*result = ncp_iget(dir, &finfo)) < 0)
|
if (!(*result = ncp_iget(dir, &finfo)) < 0)
|
||||||
{
|
{
|
||||||
ncp_close_file(NCP_SERVER(dir), finfo.file_handle);
|
ncp_close_file(NCP_SERVER(dir), finfo.file_handle);
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -955,12 +1029,17 @@ ncp_mkdir(struct inode *dir, const char *name, int len, int mode)
|
|||||||
|| ( (len == 2)
|
|| ( (len == 2)
|
||||||
&& (name[1] == '.'))))
|
&& (name[1] == '.'))))
|
||||||
{
|
{
|
||||||
|
iput(dir);
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
strncpy(_name, name, len);
|
strncpy(_name, name, len);
|
||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
|
||||||
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_upper(_name);
|
||||||
|
}
|
||||||
|
|
||||||
if (!dir || !S_ISDIR(dir->i_mode))
|
if (!dir || !S_ISDIR(dir->i_mode))
|
||||||
{
|
{
|
||||||
@@ -1018,7 +1097,11 @@ ncp_rmdir(struct inode *dir, const char *name, int len)
|
|||||||
|
|
||||||
strncpy(_name, name, len);
|
strncpy(_name, name, len);
|
||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
|
||||||
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_upper(_name);
|
||||||
|
}
|
||||||
|
|
||||||
if ((error = ncp_del_file_or_subdir(NCP_SERVER(dir),
|
if ((error = ncp_del_file_or_subdir(NCP_SERVER(dir),
|
||||||
NCP_ISTRUCT(dir),
|
NCP_ISTRUCT(dir),
|
||||||
@@ -1061,7 +1144,11 @@ ncp_unlink(struct inode *dir, const char *name, int len)
|
|||||||
{
|
{
|
||||||
strncpy(_name, name, len);
|
strncpy(_name, name, len);
|
||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
|
||||||
|
if (!ncp_preserve_case(dir))
|
||||||
|
{
|
||||||
|
str_upper(_name);
|
||||||
|
}
|
||||||
|
|
||||||
if ((error = ncp_del_file_or_subdir(NCP_SERVER(dir),
|
if ((error = ncp_del_file_or_subdir(NCP_SERVER(dir),
|
||||||
NCP_ISTRUCT(dir),
|
NCP_ISTRUCT(dir),
|
||||||
@@ -1115,11 +1202,19 @@ ncp_rename(struct inode *old_dir, const char *old_name, int old_len,
|
|||||||
|
|
||||||
strncpy(_old_name, old_name, old_len);
|
strncpy(_old_name, old_name, old_len);
|
||||||
_old_name[old_len] = '\0';
|
_old_name[old_len] = '\0';
|
||||||
str_upper(_old_name);
|
|
||||||
|
if (!ncp_preserve_case(old_dir))
|
||||||
|
{
|
||||||
|
str_upper(_old_name);
|
||||||
|
}
|
||||||
|
|
||||||
strncpy(_new_name, new_name, new_len);
|
strncpy(_new_name, new_name, new_len);
|
||||||
_new_name[new_len] = '\0';
|
_new_name[new_len] = '\0';
|
||||||
str_upper(_new_name);
|
|
||||||
|
if (!ncp_preserve_case(new_dir))
|
||||||
|
{
|
||||||
|
str_upper(_new_name);
|
||||||
|
}
|
||||||
|
|
||||||
res = ncp_ren_or_mov_file_or_subdir(NCP_SERVER(old_dir),
|
res = ncp_ren_or_mov_file_or_subdir(NCP_SERVER(old_dir),
|
||||||
NCP_ISTRUCT(old_dir), _old_name,
|
NCP_ISTRUCT(old_dir), _old_name,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <linux/stat.h>
|
#include <linux/stat.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/ncp_fs.h>
|
#include <linux/ncp_fs.h>
|
||||||
|
#include <linux/locks.h>
|
||||||
#include "ncplib_kernel.h"
|
#include "ncplib_kernel.h"
|
||||||
#include <linux/malloc.h>
|
#include <linux/malloc.h>
|
||||||
|
|
||||||
@@ -50,8 +51,10 @@ ncp_make_open(struct inode *i, int right)
|
|||||||
|
|
||||||
DPRINTK("ncp_make_open: dirent->opened = %d\n", finfo->opened);
|
DPRINTK("ncp_make_open: dirent->opened = %d\n", finfo->opened);
|
||||||
|
|
||||||
|
lock_super(i->i_sb);
|
||||||
if (finfo->opened == 0)
|
if (finfo->opened == 0)
|
||||||
{
|
{
|
||||||
|
finfo->access = -1;
|
||||||
/* tries max. rights */
|
/* tries max. rights */
|
||||||
if (ncp_open_create_file_or_subdir(NCP_SERVER(i),
|
if (ncp_open_create_file_or_subdir(NCP_SERVER(i),
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
@@ -69,12 +72,10 @@ ncp_make_open(struct inode *i, int right)
|
|||||||
{
|
{
|
||||||
finfo->access = O_RDONLY;
|
finfo->access = O_RDONLY;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return -EACCES;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unlock_super(i->i_sb);
|
||||||
|
|
||||||
if ( ((right == O_RDONLY) && ( (finfo->access == O_RDONLY)
|
if ( ((right == O_RDONLY) && ( (finfo->access == O_RDONLY)
|
||||||
|| (finfo->access == O_RDWR)))
|
|| (finfo->access == O_RDWR)))
|
||||||
|| ((right == O_WRONLY) && ( (finfo->access == O_WRONLY)
|
|| ((right == O_WRONLY) && ( (finfo->access == O_WRONLY)
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ ncp_read_inode(struct inode *inode)
|
|||||||
inode->i_nlink = 1;
|
inode->i_nlink = 1;
|
||||||
inode->i_uid = NCP_SERVER(inode)->m.uid;
|
inode->i_uid = NCP_SERVER(inode)->m.uid;
|
||||||
inode->i_gid = NCP_SERVER(inode)->m.gid;
|
inode->i_gid = NCP_SERVER(inode)->m.gid;
|
||||||
inode->i_blksize = 1024;
|
inode->i_blksize = 512;
|
||||||
inode->i_rdev = 0;
|
inode->i_rdev = 0;
|
||||||
|
|
||||||
if ((inode->i_blksize != 0) && (inode->i_size != 0))
|
if ((inode->i_blksize != 0) && (inode->i_size != 0))
|
||||||
@@ -132,7 +132,9 @@ static void
|
|||||||
ncp_put_inode(struct inode *inode)
|
ncp_put_inode(struct inode *inode)
|
||||||
{
|
{
|
||||||
struct nw_file_info *finfo = NCP_FINFO(inode);
|
struct nw_file_info *finfo = NCP_FINFO(inode);
|
||||||
|
struct super_block *sb = inode->i_sb;
|
||||||
|
|
||||||
|
lock_super(sb);
|
||||||
if (finfo->opened != 0)
|
if (finfo->opened != 0)
|
||||||
{
|
{
|
||||||
if (ncp_close_file(NCP_SERVER(inode), finfo->file_handle)!=0)
|
if (ncp_close_file(NCP_SERVER(inode), finfo->file_handle)!=0)
|
||||||
@@ -155,6 +157,7 @@ ncp_put_inode(struct inode *inode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
clear_inode(inode);
|
clear_inode(inode);
|
||||||
|
unlock_super(sb);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct super_block *
|
struct super_block *
|
||||||
|
|||||||
@@ -188,25 +188,6 @@ ncp_get_volume_info_with_number(struct ncp_server *server, int n,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
ncp_get_volume_number(struct ncp_server *server, const char *name, int *target)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
|
|
||||||
ncp_init_request_s(server, 5);
|
|
||||||
ncp_add_pstring(server, name);
|
|
||||||
|
|
||||||
if ((result = ncp_request(server, 22)) != 0)
|
|
||||||
{
|
|
||||||
ncp_unlock_server(server);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
*target = ncp_reply_byte(server, 0);
|
|
||||||
ncp_unlock_server(server);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ncp_close_file(struct ncp_server *server, const char *file_id)
|
ncp_close_file(struct ncp_server *server, const char *file_id)
|
||||||
{
|
{
|
||||||
@@ -282,8 +263,8 @@ ncp_obtain_info(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 6); /* subfunction */
|
ncp_add_byte(server, 6); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[vol_num]);
|
||||||
ncp_add_byte(server, 0); /* dos name space as dest */
|
ncp_add_byte(server, server->name_space[vol_num]);
|
||||||
ncp_add_word(server, 0xff); /* get all */
|
ncp_add_word(server, 0xff); /* get all */
|
||||||
ncp_add_dword(server, RIM_ALL);
|
ncp_add_dword(server, RIM_ALL);
|
||||||
ncp_add_handle_path(server, vol_num, dir_base, 1, path);
|
ncp_add_handle_path(server, vol_num, dir_base, 1, path);
|
||||||
@@ -299,20 +280,57 @@ ncp_obtain_info(struct ncp_server *server,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
ncp_has_os2_namespace(struct ncp_server *server, __u8 volume)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
__u8 *namespace;
|
||||||
|
__u16 no_namespaces;
|
||||||
|
|
||||||
|
ncp_init_request(server);
|
||||||
|
ncp_add_byte(server, 24); /* Subfunction: Get Name Spaces Loaded */
|
||||||
|
ncp_add_word(server, 0);
|
||||||
|
ncp_add_byte(server, volume);
|
||||||
|
|
||||||
|
if ((result = ncp_request(server, 87)) != 0)
|
||||||
|
{
|
||||||
|
ncp_unlock_server(server);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
no_namespaces = ncp_reply_word(server, 0);
|
||||||
|
namespace = ncp_reply_data(server, 2);
|
||||||
|
|
||||||
|
while (no_namespaces > 0)
|
||||||
|
{
|
||||||
|
DPRINTK("get_namespaces: found %d on %d\n", *namespace,volume);
|
||||||
|
|
||||||
|
if (*namespace == 4)
|
||||||
|
{
|
||||||
|
DPRINTK("get_namespaces: found OS2\n");
|
||||||
|
ncp_unlock_server(server);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
namespace += 1;
|
||||||
|
no_namespaces -= 1;
|
||||||
|
}
|
||||||
|
ncp_unlock_server(server);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ncp_lookup_volume(struct ncp_server *server,
|
ncp_lookup_volume(struct ncp_server *server,
|
||||||
char *volname,
|
char *volname,
|
||||||
struct nw_info_struct *target)
|
struct nw_info_struct *target)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
__u8 vol_num;
|
int volnum;
|
||||||
__u32 dir_base;
|
|
||||||
|
|
||||||
DPRINTK("ncp_lookup_volume: looking up vol %s\n", volname);
|
DPRINTK("ncp_lookup_volume: looking up vol %s\n", volname);
|
||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 22); /* Subfunction: Generate dir handle */
|
ncp_add_byte(server, 22); /* Subfunction: Generate dir handle */
|
||||||
ncp_add_byte(server, 0); /* DOS name space */
|
ncp_add_byte(server, 0); /* DOS namespace */
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
@@ -329,20 +347,19 @@ ncp_lookup_volume(struct ncp_server *server,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
dir_base = ncp_reply_dword(server, 4);
|
memset(target, 0, sizeof(*target));
|
||||||
vol_num = ncp_reply_byte(server, 8);
|
target->DosDirNum = target->dirEntNum = ncp_reply_dword(server, 4);
|
||||||
|
target->volNumber = volnum = ncp_reply_byte(server, 8);
|
||||||
ncp_unlock_server(server);
|
ncp_unlock_server(server);
|
||||||
|
|
||||||
if ((result = ncp_obtain_info(server, vol_num, dir_base, NULL,
|
server->name_space[volnum] = ncp_has_os2_namespace(server,volnum)?4:0;
|
||||||
target)) != 0)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINTK("ncp_lookup_volume: attribs = %X\n", target->attributes);
|
DPRINTK("lookup_vol: namespace[%d] = %d\n",
|
||||||
|
volnum, server->name_space[volnum]);
|
||||||
|
|
||||||
target->nameLen = strlen(volname);
|
target->nameLen = strlen(volname);
|
||||||
strcpy(target->entryName, volname);
|
strcpy(target->entryName, volname);
|
||||||
|
target->attributes = aDIR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,14 +373,14 @@ ncp_modify_file_or_subdir_dos_info(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 7); /* subfunction */
|
ncp_add_byte(server, 7); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[file->volNumber]);
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
ncp_add_word(server, 0x8006); /* search attribs: all */
|
ncp_add_word(server, 0x8006); /* search attribs: all */
|
||||||
|
|
||||||
ncp_add_dword(server, info_mask);
|
ncp_add_dword(server, info_mask);
|
||||||
ncp_add_mem(server, info, sizeof(*info));
|
ncp_add_mem(server, info, sizeof(*info));
|
||||||
ncp_add_handle_path(server, file->volNumber,
|
ncp_add_handle_path(server, file->volNumber,
|
||||||
file->DosDirNum, 1, NULL);
|
file->dirEntNum, 1, NULL);
|
||||||
|
|
||||||
if ((result = ncp_request(server, 87)) != 0)
|
if ((result = ncp_request(server, 87)) != 0)
|
||||||
{
|
{
|
||||||
@@ -383,11 +400,11 @@ ncp_del_file_or_subdir(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 8); /* subfunction */
|
ncp_add_byte(server, 8); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[dir->volNumber]);
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
ncp_add_word(server, 0x8006); /* search attribs: all */
|
ncp_add_word(server, 0x8006); /* search attribs: all */
|
||||||
ncp_add_handle_path(server, dir->volNumber,
|
ncp_add_handle_path(server, dir->volNumber,
|
||||||
dir->DosDirNum, 1, name);
|
dir->dirEntNum, 1, name);
|
||||||
|
|
||||||
if ((result = ncp_request(server, 87)) != 0)
|
if ((result = ncp_request(server, 87)) != 0)
|
||||||
{
|
{
|
||||||
@@ -420,15 +437,16 @@ ncp_open_create_file_or_subdir(struct ncp_server *server,
|
|||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
__u16 search_attribs = 0x0006;
|
__u16 search_attribs = 0x0006;
|
||||||
|
__u8 volume = (dir != NULL) ? dir->volNumber : target->i.volNumber;
|
||||||
|
|
||||||
if ((create_attributes & aDIR) != 0)
|
if ((create_attributes & aDIR) != 0)
|
||||||
{
|
{
|
||||||
search_attribs |= 0x8000;
|
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, server->name_space[volume]);
|
||||||
ncp_add_byte(server, open_create_mode);
|
ncp_add_byte(server, open_create_mode);
|
||||||
ncp_add_word(server, search_attribs);
|
ncp_add_word(server, search_attribs);
|
||||||
ncp_add_dword(server, RIM_ALL);
|
ncp_add_dword(server, RIM_ALL);
|
||||||
@@ -439,13 +457,11 @@ ncp_open_create_file_or_subdir(struct ncp_server *server,
|
|||||||
|
|
||||||
if (dir != NULL)
|
if (dir != NULL)
|
||||||
{
|
{
|
||||||
ncp_add_handle_path(server, dir->volNumber,
|
ncp_add_handle_path(server, volume, dir->dirEntNum, 1, name);
|
||||||
dir->DosDirNum, 1, name);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ncp_add_handle_path(server,
|
ncp_add_handle_path(server, volume, target->i.dirEntNum,
|
||||||
target->i.volNumber, target->i.DosDirNum,
|
|
||||||
1, NULL);
|
1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,9 +497,9 @@ ncp_initialize_search(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 2); /* subfunction */
|
ncp_add_byte(server, 2); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[dir->volNumber]);
|
||||||
ncp_add_byte(server, 0); /* reserved */
|
ncp_add_byte(server, 0); /* reserved */
|
||||||
ncp_add_handle_path(server, dir->volNumber, dir->DosDirNum, 1, NULL);
|
ncp_add_handle_path(server, dir->volNumber, dir->dirEntNum, 1, NULL);
|
||||||
|
|
||||||
if ((result = ncp_request(server, 87)) != 0)
|
if ((result = ncp_request(server, 87)) != 0)
|
||||||
{
|
{
|
||||||
@@ -507,7 +523,7 @@ ncp_search_for_file_or_subdir(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 3); /* subfunction */
|
ncp_add_byte(server, 3); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[seq->volNumber]);
|
||||||
ncp_add_byte(server, 0); /* data stream (???) */
|
ncp_add_byte(server, 0); /* data stream (???) */
|
||||||
ncp_add_word(server, 0xffff); /* Search attribs */
|
ncp_add_word(server, 0xffff); /* Search attribs */
|
||||||
ncp_add_dword(server, RIM_ALL); /* return info mask */
|
ncp_add_dword(server, RIM_ALL); /* return info mask */
|
||||||
@@ -542,19 +558,19 @@ ncp_ren_or_mov_file_or_subdir(struct ncp_server *server,
|
|||||||
|
|
||||||
ncp_init_request(server);
|
ncp_init_request(server);
|
||||||
ncp_add_byte(server, 4); /* subfunction */
|
ncp_add_byte(server, 4); /* subfunction */
|
||||||
ncp_add_byte(server, 0); /* dos name space */
|
ncp_add_byte(server, server->name_space[old_dir->volNumber]);
|
||||||
ncp_add_byte(server, 1); /* rename flag */
|
ncp_add_byte(server, 1); /* rename flag */
|
||||||
ncp_add_word(server, 0x8006); /* search attributes */
|
ncp_add_word(server, 0x8006); /* search attributes */
|
||||||
|
|
||||||
/* source Handle Path */
|
/* source Handle Path */
|
||||||
ncp_add_byte(server, old_dir->volNumber);
|
ncp_add_byte(server, old_dir->volNumber);
|
||||||
ncp_add_dword(server, old_dir->DosDirNum);
|
ncp_add_dword(server, old_dir->dirEntNum);
|
||||||
ncp_add_byte(server, 1);
|
ncp_add_byte(server, 1);
|
||||||
ncp_add_byte(server, 1); /* 1 source component */
|
ncp_add_byte(server, 1); /* 1 source component */
|
||||||
|
|
||||||
/* dest Handle Path */
|
/* dest Handle Path */
|
||||||
ncp_add_byte(server, new_dir->volNumber);
|
ncp_add_byte(server, new_dir->volNumber);
|
||||||
ncp_add_dword(server, new_dir->DosDirNum);
|
ncp_add_dword(server, new_dir->dirEntNum);
|
||||||
ncp_add_byte(server, 1);
|
ncp_add_byte(server, 1);
|
||||||
ncp_add_byte(server, 1); /* 1 destination component */
|
ncp_add_byte(server, 1); /* 1 destination component */
|
||||||
|
|
||||||
|
|||||||
@@ -222,6 +222,7 @@ do_ncp_rpc_call(struct ncp_server *server, int size)
|
|||||||
int timeout;
|
int timeout;
|
||||||
int retrans;
|
int retrans;
|
||||||
int major_timeout_seen;
|
int major_timeout_seen;
|
||||||
|
int acknowledge_seen;
|
||||||
int n;
|
int n;
|
||||||
int addrlen;
|
int addrlen;
|
||||||
unsigned long old_mask;
|
unsigned long old_mask;
|
||||||
@@ -243,7 +244,8 @@ do_ncp_rpc_call(struct ncp_server *server, int size)
|
|||||||
return -EBADF;
|
return -EBADF;
|
||||||
}
|
}
|
||||||
init_timeout = server->m.time_out;
|
init_timeout = server->m.time_out;
|
||||||
max_timeout = NCP_MAX_RPC_TIMEOUT*HZ/10;
|
max_timeout = NCP_MAX_RPC_TIMEOUT;
|
||||||
|
acknowledge_seen = 0;
|
||||||
retrans = server->m.retry_count;
|
retrans = server->m.retry_count;
|
||||||
major_timeout_seen = 0;
|
major_timeout_seen = 0;
|
||||||
old_mask = current->blocked;
|
old_mask = current->blocked;
|
||||||
@@ -296,11 +298,14 @@ do_ncp_rpc_call(struct ncp_server *server, int size)
|
|||||||
{
|
{
|
||||||
if (timeout > max_timeout)
|
if (timeout > max_timeout)
|
||||||
{
|
{
|
||||||
/* JEJB/JSP 2/7/94
|
/* JEJB/JSP 2/7/94
|
||||||
* This is useful to see if the system is
|
* This is useful to see if the system is
|
||||||
* hanging */
|
* hanging */
|
||||||
printk("NCP max timeout reached\n");
|
if (acknowledge_seen == 0)
|
||||||
timeout = max_timeout;
|
{
|
||||||
|
printk("NCP max timeout reached\n");
|
||||||
|
}
|
||||||
|
timeout = max_timeout;
|
||||||
}
|
}
|
||||||
current->timeout = jiffies + timeout;
|
current->timeout = jiffies + timeout;
|
||||||
schedule();
|
schedule();
|
||||||
@@ -373,6 +378,9 @@ do_ncp_rpc_call(struct ncp_server *server, int size)
|
|||||||
sock->ops->recvfrom(sock, (void *)&reply,
|
sock->ops->recvfrom(sock, (void *)&reply,
|
||||||
sizeof(reply), 1, 0,
|
sizeof(reply), 1, 0,
|
||||||
NULL, &addrlen);
|
NULL, &addrlen);
|
||||||
|
n = 0;
|
||||||
|
timeout = max_timeout;
|
||||||
|
acknowledge_seen = 1;
|
||||||
goto re_select;
|
goto re_select;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
76
lib/Makefile
Normal file
76
lib/Makefile
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#
|
||||||
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
|
#
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
ifeq ($(HAVE_ELF),yes)
|
||||||
|
PIC_FLAG = -fPIC
|
||||||
|
NCP_LIB = libncp.so.1.0
|
||||||
|
LIB_LINK_COMMAND = gcc -shared -Wl,-soname,libncp.so.1 -o $(NCP_LIB)
|
||||||
|
INSTALL_LIB = install $(NCP_LIB) -m 755 /lib; \
|
||||||
|
ln -sf $(NCP_LIB) /lib/libncp.so.1; \
|
||||||
|
ldconfig
|
||||||
|
export PIC_FLAG
|
||||||
|
else
|
||||||
|
NCP_LIB = libncp.a
|
||||||
|
LIB_LINK_COMMAND = ar r libncp.a
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += $(PIC_FLAG)
|
||||||
|
|
||||||
|
default:
|
||||||
|
make -C ..
|
||||||
|
|
||||||
|
all: libcom_err.a ncplib_err.o $(NCP_LIB)
|
||||||
|
|
||||||
|
install:
|
||||||
|
$(INSTALL_LIB)
|
||||||
|
|
||||||
|
ncplib.o: ncplib.c ncplib_err.h
|
||||||
|
$(CC) $(CFLAGS) -c ncplib.c
|
||||||
|
|
||||||
|
COM_ERR_CFILES = com_err/com_err.c com_err/error_message.c com_err/et_name.c \
|
||||||
|
com_err/init_et.c
|
||||||
|
COM_ERR_OFILES = com_err/com_err.o com_err/error_message.o com_err/et_name.o \
|
||||||
|
com_err/init_et.o
|
||||||
|
|
||||||
|
libcom_err.a: $(COM_ERR_CFILES)
|
||||||
|
make -C com_err
|
||||||
|
|
||||||
|
$(NCP_LIB): ncplib.o ncplib_err.o libcom_err.a
|
||||||
|
$(LIB_LINK_COMMAND) ncplib.o ncplib_err.o $(COM_ERR_OFILES)
|
||||||
|
ln -sf libncp.so.1.0 libncp.so.1
|
||||||
|
ln -sf libncp.so.1 libncp.so
|
||||||
|
export LD_LIBRARY_PATH=`pwd`:LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
ncplib_err.o: ncplib_err.h ncplib_err.c
|
||||||
|
$(CC) $(CFLAGS) -c ncplib_err.c
|
||||||
|
|
||||||
|
ncplib_err.h: ncplib_err.et
|
||||||
|
com_err/compile_et ncplib_err
|
||||||
|
ln -sf ../lib/ncplib_err.h ../include/ncplib_err.h
|
||||||
|
|
||||||
|
ncplib_err.c: ncplib_err.et
|
||||||
|
com_err/compile_et ncplib_err
|
||||||
|
|
||||||
|
dep: ncplib_err.h
|
||||||
|
make -C com_err dep
|
||||||
|
$(CPP) -M $(INCLUDES) *.c > .depend
|
||||||
|
|
||||||
|
clean:
|
||||||
|
make -C com_err clean
|
||||||
|
rm -f *.o *~ ncplib_err.[ch] ../include/ncplib_err.h
|
||||||
|
rm -f libncp.*
|
||||||
|
|
||||||
|
mrproper: clean
|
||||||
|
make -C com_err mrproper
|
||||||
|
rm -f $(UTILS) .depend $(DISTFILE)
|
||||||
|
|
||||||
|
#
|
||||||
|
# include a dependency file if one exists
|
||||||
|
#
|
||||||
|
ifeq (.depend,$(wildcard .depend))
|
||||||
|
include .depend
|
||||||
|
endif
|
||||||
|
|
||||||
@@ -3,15 +3,18 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
OBJECTS = com_err.o error_message.o et_name.o init_et.o
|
OBJECTS = com_err.o error_message.o et_name.o init_et.o
|
||||||
CFLAGS = -Wall -O2
|
CFLAGS = -Wall -O2 $(PIC_FLAG)
|
||||||
|
|
||||||
all: $(OBJECTS)
|
all: ../libcom_err.a
|
||||||
|
|
||||||
|
../libcom_err.a: $(OBJECTS)
|
||||||
|
ar r ../libcom_err.a $(OBJECTS)
|
||||||
|
|
||||||
dep:
|
dep:
|
||||||
$(CPP) -M $(INCLUDES) *.c > .depend
|
$(CPP) -M $(INCLUDES) *.c > .depend
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o
|
rm -f *.o ../libcom_err.a
|
||||||
|
|
||||||
mrproper: clean
|
mrproper: clean
|
||||||
rm -f .depend
|
rm -f .depend
|
||||||
File diff suppressed because it is too large
Load Diff
45
lib/ncplib_err.et
Normal file
45
lib/ncplib_err.et
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
error_table NCPL
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_SERVER,
|
||||||
|
"No server found"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_USER,
|
||||||
|
"No username found"
|
||||||
|
|
||||||
|
ec NCPL_ET_HOST_UNKNOWN,
|
||||||
|
"Server Unknown"
|
||||||
|
|
||||||
|
ec NCPL_ET_REQUEST_ERROR,
|
||||||
|
"NCP Request returned error code"
|
||||||
|
|
||||||
|
ec NCPL_ET_NAMETOOLONG,
|
||||||
|
"Name too long"
|
||||||
|
|
||||||
|
ec NCPL_ET_MSG_TOO_LONG,
|
||||||
|
"Message too long"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_SPEC,
|
||||||
|
"Could not find valid connection spec"
|
||||||
|
|
||||||
|
ec NCPL_ET_INVALID_MODE,
|
||||||
|
"$HOME/.nwclient has invalid mode, must be 600"
|
||||||
|
|
||||||
|
ec NCPL_ET_LOGIN_DENIED,
|
||||||
|
"Login denied"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_INTERFACE,
|
||||||
|
"No primary IPX interface found"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_PASSWORD,
|
||||||
|
"Could not get password"
|
||||||
|
|
||||||
|
ec NCPL_ET_PWD_TOO_LONG,
|
||||||
|
"Password too long"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_IPX,
|
||||||
|
"Could not alloc IPX socket. Probably no IPX support in kernel"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_NCPFS_FILE,
|
||||||
|
"The file is probably not on a ncpfs mounted directory"
|
||||||
|
|
||||||
|
end
|
||||||
343
lib/nwcrypt.c
Normal file
343
lib/nwcrypt.c
Normal file
@@ -0,0 +1,343 @@
|
|||||||
|
/*$*********************************************************
|
||||||
|
$*
|
||||||
|
$* This code has been taken from DDJ 11/93, from an
|
||||||
|
$* article by Pawel Szczerbina.
|
||||||
|
$*
|
||||||
|
$* Password encryption routines follow.
|
||||||
|
$* Converted to C from Barry Nance's Pascal
|
||||||
|
$* prog published in the March -93 issue of Byte.
|
||||||
|
$*
|
||||||
|
$* Adapted to be useable for ncpfs by
|
||||||
|
$* Volker Lendecke <lendecke@namu01.gwdg.de> in
|
||||||
|
$* October 1995.
|
||||||
|
$*
|
||||||
|
$********************************************************* */
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
|
||||||
|
I read that Novell is not very open when it comes to technical details
|
||||||
|
of the Netware Core Protocol. This might be especially true for the
|
||||||
|
encryption stuff. I took the necessary code from Dr. Dobb's Journal
|
||||||
|
11/93, Undocumented Corner. I asked Jon Erickson <jon@ddj.com> about
|
||||||
|
the legal status of this piece of code:
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
Date: Thu, 12 Oct 1995 13:44:18 +0100
|
||||||
|
From: Volker Lendecke <lendecke>
|
||||||
|
To: jon@ddj.com
|
||||||
|
Subject: legal status of your source code?
|
||||||
|
|
||||||
|
|
||||||
|
Hello!
|
||||||
|
|
||||||
|
I hope that you're the right one to write to, you are the first on your WWW
|
||||||
|
server. If you are not, could you please forward this message to the right
|
||||||
|
person? Thanks.
|
||||||
|
|
||||||
|
I'm currently exploring the possibility to write a free (in the GNU GPL
|
||||||
|
sense) NCP filesystem, which would allow me to access a novell server
|
||||||
|
transparently. For that I would like to use the encryption functions you
|
||||||
|
published in DDJ 11/93, Undocumented Corner. I would make some cosmetic
|
||||||
|
changes, such as other indentations, minor code changes and so on. But I do
|
||||||
|
not know if that allows me to publish this code under GPL. One alternative
|
||||||
|
would be to publish a diff against your listing, but that would probably
|
||||||
|
contain much of your code as well, and it would be very inconvenient for
|
||||||
|
the average user.
|
||||||
|
|
||||||
|
I think that you have some kind of standard procedure for such a
|
||||||
|
case. Please tell me what I should do.
|
||||||
|
|
||||||
|
Many thanks in advance,
|
||||||
|
|
||||||
|
Volker
|
||||||
|
|
||||||
|
+=================================================================+
|
||||||
|
! Volker Lendecke Internet: lendecke@namu01.gwdg.de !
|
||||||
|
! D-37081 Goettingen, Germany !
|
||||||
|
+=================================================================+
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
|
||||||
|
I got the following answer:
|
||||||
|
|
||||||
|
---
|
||||||
|
From: Jon Erickson <jon@ddj.com>
|
||||||
|
X-Mailer: SCO System V Mail (version 3.2)
|
||||||
|
To: lendecke@namu01.gwdg.de
|
||||||
|
Subject: Re: legal status of your source code?
|
||||||
|
Date: Thu, 12 Oct 95 5:42:56 PDT
|
||||||
|
|
||||||
|
Volker,
|
||||||
|
Code from Dr. Dobb's Journal related articles is provided for
|
||||||
|
anyone to use. Clearly, the author of the article should be
|
||||||
|
given credit.
|
||||||
|
Jon Erickson
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
With this answer in mind, I took the code and made it a bit more
|
||||||
|
C-like. The original seemed to be translated by a mechanical pascal->c
|
||||||
|
translator. Jon's answer encouraged me to publish nwcrypt.c under the
|
||||||
|
GPL. If anybody who knows more about copyright and sees any problems
|
||||||
|
with this, please tell me.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/******************* Data types ***************************/
|
||||||
|
typedef unsigned char buf32[32];
|
||||||
|
typedef unsigned char buf16[16];
|
||||||
|
typedef unsigned char buf8[8];
|
||||||
|
typedef unsigned char buf4[4];
|
||||||
|
|
||||||
|
static unsigned char encrypttable[256] =
|
||||||
|
{0x7, 0x8, 0x0, 0x8, 0x6, 0x4, 0xE, 0x4, 0x5, 0xC, 0x1, 0x7, 0xB, 0xF, 0xA, 0x8,
|
||||||
|
0xF, 0x8, 0xC, 0xC, 0x9, 0x4, 0x1, 0xE, 0x4, 0x6, 0x2, 0x4, 0x0, 0xA, 0xB, 0x9,
|
||||||
|
0x2, 0xF, 0xB, 0x1, 0xD, 0x2, 0x1, 0x9, 0x5, 0xE, 0x7, 0x0, 0x0, 0x2, 0x6, 0x6,
|
||||||
|
0x0, 0x7, 0x3, 0x8, 0x2, 0x9, 0x3, 0xF, 0x7, 0xF, 0xC, 0xF, 0x6, 0x4, 0xA, 0x0,
|
||||||
|
0x2, 0x3, 0xA, 0xB, 0xD, 0x8, 0x3, 0xA, 0x1, 0x7, 0xC, 0xF, 0x1, 0x8, 0x9, 0xD,
|
||||||
|
0x9, 0x1, 0x9, 0x4, 0xE, 0x4, 0xC, 0x5, 0x5, 0xC, 0x8, 0xB, 0x2, 0x3, 0x9, 0xE,
|
||||||
|
0x7, 0x7, 0x6, 0x9, 0xE, 0xF, 0xC, 0x8, 0xD, 0x1, 0xA, 0x6, 0xE, 0xD, 0x0, 0x7,
|
||||||
|
0x7, 0xA, 0x0, 0x1, 0xF, 0x5, 0x4, 0xB, 0x7, 0xB, 0xE, 0xC, 0x9, 0x5, 0xD, 0x1,
|
||||||
|
0xB, 0xD, 0x1, 0x3, 0x5, 0xD, 0xE, 0x6, 0x3, 0x0, 0xB, 0xB, 0xF, 0x3, 0x6, 0x4,
|
||||||
|
0x9, 0xD, 0xA, 0x3, 0x1, 0x4, 0x9, 0x4, 0x8, 0x3, 0xB, 0xE, 0x5, 0x0, 0x5, 0x2,
|
||||||
|
0xC, 0xB, 0xD, 0x5, 0xD, 0x5, 0xD, 0x2, 0xD, 0x9, 0xA, 0xC, 0xA, 0x0, 0xB, 0x3,
|
||||||
|
0x5, 0x3, 0x6, 0x9, 0x5, 0x1, 0xE, 0xE, 0x0, 0xE, 0x8, 0x2, 0xD, 0x2, 0x2, 0x0,
|
||||||
|
0x4, 0xF, 0x8, 0x5, 0x9, 0x6, 0x8, 0x6, 0xB, 0xA, 0xB, 0xF, 0x0, 0x7, 0x2, 0x8,
|
||||||
|
0xC, 0x7, 0x3, 0xA, 0x1, 0x4, 0x2, 0x5, 0xF, 0x7, 0xA, 0xC, 0xE, 0x5, 0x9, 0x3,
|
||||||
|
0xE, 0x7, 0x1, 0x2, 0xE, 0x1, 0xF, 0x4, 0xA, 0x6, 0xC, 0x6, 0xF, 0x4, 0x3, 0x0,
|
||||||
|
0xC, 0x0, 0x3, 0x6, 0xF, 0x8, 0x7, 0xB, 0x2, 0xD, 0xC, 0x6, 0xA, 0xA, 0x8, 0xD};
|
||||||
|
|
||||||
|
static buf32 encryptkeys =
|
||||||
|
{0x48, 0x93, 0x46, 0x67, 0x98, 0x3D, 0xE6, 0x8D,
|
||||||
|
0xB7, 0x10, 0x7A, 0x26, 0x5A, 0xB9, 0xB1, 0x35,
|
||||||
|
0x6B, 0x0F, 0xD5, 0x70, 0xAE, 0xFB, 0xAD, 0x11,
|
||||||
|
0xF4, 0x47, 0xDC, 0xA7, 0xEC, 0xCF, 0x50, 0xC0};
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
shuffle1(buf32 temp, unsigned char *target)
|
||||||
|
{
|
||||||
|
short b4;
|
||||||
|
unsigned char b3;
|
||||||
|
int s, b2, i;
|
||||||
|
|
||||||
|
b4 = 0;
|
||||||
|
|
||||||
|
for (b2 = 0; b2 <= 1; ++b2)
|
||||||
|
{
|
||||||
|
for (s = 0; s <= 31; ++s)
|
||||||
|
{
|
||||||
|
b3 = (temp[s] + b4) ^ (temp[(s + b4) & 31] - encryptkeys[s]);
|
||||||
|
b4 = b4 + b3;
|
||||||
|
temp[s] = b3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i <= 15; ++i)
|
||||||
|
{
|
||||||
|
target[i] = encrypttable[temp[2 * i]]
|
||||||
|
| (encrypttable[temp[2 * i + 1]] << 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
shuffle(const unsigned char *lon, const unsigned char *buf, int buflen,
|
||||||
|
unsigned char *target)
|
||||||
|
{
|
||||||
|
int b2, d, s;
|
||||||
|
buf32 temp;
|
||||||
|
|
||||||
|
while ((buflen > 0)
|
||||||
|
&& (buf[buflen - 1] == 0))
|
||||||
|
{
|
||||||
|
buflen = buflen - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (s = 0; s < 32; s++)
|
||||||
|
{
|
||||||
|
temp[s] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
d = 0;
|
||||||
|
while (buflen >= 32)
|
||||||
|
{
|
||||||
|
for (s = 0; s <= 31; ++s)
|
||||||
|
{
|
||||||
|
temp[s] = temp[s] ^ buf[d];
|
||||||
|
d = d + 1;
|
||||||
|
}
|
||||||
|
buflen = buflen - 32;
|
||||||
|
}
|
||||||
|
b2 = d;
|
||||||
|
if (buflen > 0)
|
||||||
|
{
|
||||||
|
for (s = 0; s <= 31; ++s)
|
||||||
|
{
|
||||||
|
if (d + buflen == b2)
|
||||||
|
{
|
||||||
|
b2 = d;
|
||||||
|
temp[s] = temp[s] ^ encryptkeys[s];
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
temp[s] = temp[s] ^ buf[b2];
|
||||||
|
b2 = b2 + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (s = 0; s <= 31; ++s)
|
||||||
|
temp[s] = temp[s] ^ lon[s & 3];
|
||||||
|
|
||||||
|
shuffle1(temp, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
nw_encrypt(const unsigned char *fra,
|
||||||
|
const unsigned char *buf,
|
||||||
|
unsigned char *til)
|
||||||
|
{
|
||||||
|
buf32 k;
|
||||||
|
int s;
|
||||||
|
|
||||||
|
shuffle(&(fra[0]), buf, 16, &(k[0]));
|
||||||
|
shuffle(&(fra[4]), buf, 16, &(k[16]));
|
||||||
|
|
||||||
|
for (s = 0; s <= 15; ++s)
|
||||||
|
k[s] = k[s] ^ k[31 - s];
|
||||||
|
|
||||||
|
for (s = 0; s <= 7; ++s)
|
||||||
|
til[s] = k[s] ^ k[15 - s];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* The following code was contributed by */
|
||||||
|
/* Guntram Blohm <gbl%th7csun1@str.daimler-benz.com> */
|
||||||
|
/* */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
/* server side (mars etc.) should:
|
||||||
|
* store the *encrypted* password internally (output from shuffle)
|
||||||
|
* verify if nw_encrypt(cryptkey from GetCryptKey, old stored password)
|
||||||
|
== cryptkey in EncryptedChangePassword request buffer (this means
|
||||||
|
old password was correct)
|
||||||
|
* decrypt new password in request buffer using (yet to write) inverse of
|
||||||
|
newpassencrypt with old stored password as parameter
|
||||||
|
* compute the length of the unencrypted new password as len ^ (first byte of
|
||||||
|
old internal password) ^ (second byte of old internal password)
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char
|
||||||
|
newshuffle[256 + 16] =
|
||||||
|
{
|
||||||
|
0x0f, 0x08, 0x05, 0x07, 0x0c, 0x02, 0x0e, 0x09,
|
||||||
|
0x00, 0x01, 0x06, 0x0d, 0x03, 0x04, 0x0b, 0x0a,
|
||||||
|
0x02, 0x0c, 0x0e, 0x06, 0x0f, 0x00, 0x01, 0x08,
|
||||||
|
0x0d, 0x03, 0x0a, 0x04, 0x09, 0x0b, 0x05, 0x07,
|
||||||
|
|
||||||
|
0x05, 0x02, 0x09, 0x0f, 0x0c, 0x04, 0x0d, 0x00,
|
||||||
|
0x0e, 0x0a, 0x06, 0x08, 0x0b, 0x01, 0x03, 0x07,
|
||||||
|
0x0f, 0x0d, 0x02, 0x06, 0x07, 0x08, 0x05, 0x09,
|
||||||
|
0x00, 0x04, 0x0c, 0x03, 0x01, 0x0a, 0x0b, 0x0e,
|
||||||
|
|
||||||
|
0x05, 0x0e, 0x02, 0x0b, 0x0d, 0x0a, 0x07, 0x00,
|
||||||
|
0x08, 0x06, 0x04, 0x01, 0x0f, 0x0c, 0x03, 0x09,
|
||||||
|
0x08, 0x02, 0x0f, 0x0a, 0x05, 0x09, 0x06, 0x0c,
|
||||||
|
0x00, 0x0b, 0x01, 0x0d, 0x07, 0x03, 0x04, 0x0e,
|
||||||
|
|
||||||
|
0x0e, 0x08, 0x00, 0x09, 0x04, 0x0b, 0x02, 0x07,
|
||||||
|
0x0c, 0x03, 0x0a, 0x05, 0x0d, 0x01, 0x06, 0x0f,
|
||||||
|
0x01, 0x04, 0x08, 0x0a, 0x0d, 0x0b, 0x07, 0x0e,
|
||||||
|
0x05, 0x0f, 0x03, 0x09, 0x00, 0x02, 0x06, 0x0c,
|
||||||
|
|
||||||
|
0x05, 0x03, 0x0c, 0x08, 0x0b, 0x02, 0x0e, 0x0a,
|
||||||
|
0x04, 0x01, 0x0d, 0x00, 0x06, 0x07, 0x0f, 0x09,
|
||||||
|
0x06, 0x00, 0x0b, 0x0e, 0x0d, 0x04, 0x0c, 0x0f,
|
||||||
|
0x07, 0x02, 0x08, 0x0a, 0x01, 0x05, 0x03, 0x09,
|
||||||
|
|
||||||
|
0x0b, 0x05, 0x0a, 0x0e, 0x0f, 0x01, 0x0c, 0x00,
|
||||||
|
0x06, 0x04, 0x02, 0x09, 0x03, 0x0d, 0x07, 0x08,
|
||||||
|
0x07, 0x02, 0x0a, 0x00, 0x0e, 0x08, 0x0f, 0x04,
|
||||||
|
0x0c, 0x0b, 0x09, 0x01, 0x05, 0x0d, 0x03, 0x06,
|
||||||
|
|
||||||
|
0x07, 0x04, 0x0f, 0x09, 0x05, 0x01, 0x0c, 0x0b,
|
||||||
|
0x00, 0x03, 0x08, 0x0e, 0x02, 0x0a, 0x06, 0x0d,
|
||||||
|
0x09, 0x04, 0x08, 0x00, 0x0a, 0x03, 0x01, 0x0c,
|
||||||
|
0x05, 0x0f, 0x07, 0x02, 0x0b, 0x0e, 0x06, 0x0d,
|
||||||
|
|
||||||
|
0x09, 0x05, 0x04, 0x07, 0x0e, 0x08, 0x03, 0x01,
|
||||||
|
0x0d, 0x0b, 0x0c, 0x02, 0x00, 0x0f, 0x06, 0x0a,
|
||||||
|
0x09, 0x0a, 0x0b, 0x0d, 0x05, 0x03, 0x0f, 0x00,
|
||||||
|
0x01, 0x0c, 0x08, 0x07, 0x06, 0x04, 0x0e, 0x02,
|
||||||
|
|
||||||
|
0x03, 0x0e, 0x0f, 0x02, 0x0d, 0x0c, 0x04, 0x05,
|
||||||
|
0x09, 0x06, 0x00, 0x01, 0x0b, 0x07, 0x0a, 0x08,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* verschluesseln des neuen Passworts fuer keyed change password
|
||||||
|
* Verwendung:
|
||||||
|
* - Shuffle (aus nwcrypt.c) altes passwort nach old (16 bytes)
|
||||||
|
* - shuffle neues passwort nach new (16 bytes)
|
||||||
|
* - nwpassencrypt (diese Funktion) zweimal aufrufen fuer je 8 bytes:
|
||||||
|
* nwpassencrypt(old+0, new+0, out+0)
|
||||||
|
* nwpassencrypt(old+8, new+8, out+8)
|
||||||
|
* - NCP-Buffer aufbauen:
|
||||||
|
* 2 byte Laenge im Hi-Lo-Format
|
||||||
|
* 1 byte Funktion (0x4b)
|
||||||
|
* 8 byte (nwcrypt Ergebnis analog login/verify password)
|
||||||
|
* 2 byte Objecttype
|
||||||
|
* 1 byte Objectname-Laenge
|
||||||
|
* n byte Objectname
|
||||||
|
* 1 byte (Laenge des eingegebenen neuen Passworts ^ old[0] ^ old[1])&0x7f|0x40
|
||||||
|
* 16 byte (Ergebnis dieser Funktion doppelt aufgerufen, s.o.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt the new password for keyed change password
|
||||||
|
* For info on how to use this function, look at ncp_change_login_passwd
|
||||||
|
* in ncplib.c.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
newpassencrypt(char *old, char *new, char *out)
|
||||||
|
{
|
||||||
|
char *p, *bx;
|
||||||
|
char copy[8];
|
||||||
|
int i, di, ax;
|
||||||
|
char cl, dl, ch;
|
||||||
|
|
||||||
|
memcpy(copy, new, 8);
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
for (di = 0, ax = 0, p = old; di < 8; di++, ax += 0x20, p++)
|
||||||
|
{
|
||||||
|
cl = newshuffle[(((copy[di] ^ *p) >> 4) & 0x0f) + ax + 0x10] << 4;
|
||||||
|
dl = newshuffle[((copy[di] ^ *p) & 0xf) + ax];
|
||||||
|
copy[di] = cl | dl;
|
||||||
|
}
|
||||||
|
|
||||||
|
ch = old[7];
|
||||||
|
for (bx = old + 7; bx > old; bx--)
|
||||||
|
{
|
||||||
|
*bx = ((bx[-1] >> 4) & 0x0f) | ((*bx) << 4);
|
||||||
|
}
|
||||||
|
*old = ((ch >> 4) & 0x0f) | (*old) << 4;
|
||||||
|
|
||||||
|
memset(out, '\0', 8);
|
||||||
|
|
||||||
|
for (di = 0; di < 16; di++)
|
||||||
|
{
|
||||||
|
if (newshuffle[di + 0x100] & 1)
|
||||||
|
ch = ((copy[newshuffle[di + 0x100] / 2] >> 4) & 0x0f);
|
||||||
|
else
|
||||||
|
ch = copy[newshuffle[di + 0x100] / 2] & 0x0f;
|
||||||
|
out[di / 2] |= ((di & 1) ? ch << 4 : ch);
|
||||||
|
}
|
||||||
|
memcpy(copy, out, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
13
man/Makefile
13
man/Makefile
@@ -1,17 +1,12 @@
|
|||||||
MAN1= slist nprint pqlist nsend pserver
|
|
||||||
MAN5= nwclient
|
|
||||||
MAN8= ncpmount ncpumount ipx_configure ipx_interface ipx_internal_net \
|
|
||||||
ipx_route nwmsg
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|
||||||
dep:
|
dep:
|
||||||
|
|
||||||
install:
|
install:
|
||||||
for i in $(MAN1); do install $$i.1 -m 755 /usr/local/man/man1; done
|
for i in *.1; do install $$i -m 755 /usr/local/man/man1; done
|
||||||
for i in $(MAN5); do install $$i.5 -m 755 /usr/local/man/man5; done
|
for i in *.5; do install $$i -m 755 /usr/local/man/man5; done
|
||||||
for i in $(MAN8); do install $$i.8 -m 755 /usr/local/man/man8; done
|
for i in *.8; do install $$i -m 755 /usr/local/man/man8; done
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
rm -f *~
|
||||||
96
man/ncopy.1
Normal file
96
man/ncopy.1
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
.\"
|
||||||
|
.\" Man page for the ncopy program
|
||||||
|
.\"
|
||||||
|
.TH NCOPY 1 17/03/1996 ncopy ncopy
|
||||||
|
.SH NAME
|
||||||
|
ncopy \- NetWare file copy
|
||||||
|
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B ncopy -V
|
||||||
|
|
||||||
|
.B ncopy
|
||||||
|
[
|
||||||
|
.B -vn
|
||||||
|
]
|
||||||
|
[
|
||||||
|
.B -s
|
||||||
|
.I amount
|
||||||
|
]
|
||||||
|
.B file destinationfile|directory
|
||||||
|
|
||||||
|
.B ncopy
|
||||||
|
[
|
||||||
|
.B -vn
|
||||||
|
]
|
||||||
|
[
|
||||||
|
.B -s
|
||||||
|
.I amount
|
||||||
|
]
|
||||||
|
.B file1
|
||||||
|
[
|
||||||
|
.B file2 ...
|
||||||
|
]
|
||||||
|
.B directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
With
|
||||||
|
.B ncopy
|
||||||
|
you can copy files to different locations on a single NetWare file
|
||||||
|
server without generating excess network traffic. The program uses
|
||||||
|
a NetWare function to do the copy rather than transferring the file
|
||||||
|
across the network for both the read and write.
|
||||||
|
|
||||||
|
If the last argument is a directory,
|
||||||
|
.B ncopy
|
||||||
|
will copy the source file(s) into the directory. If only two files
|
||||||
|
are given and the last argument is not a directory, it will copy the
|
||||||
|
source file to the destination file.
|
||||||
|
|
||||||
|
If the source and destination files are not on the same NetWare server
|
||||||
|
(or are not on NetWare servers at all),
|
||||||
|
.B ncopy
|
||||||
|
will do a normal file copy.
|
||||||
|
.SH OPTIONS
|
||||||
|
.B -V
|
||||||
|
.RS 3
|
||||||
|
Show version number and exit
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
Verbose copy. Will show current file and percentage completion.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
Nice NetWare copy. Will sleep for a second between copying blocks on
|
||||||
|
the NetWare server. Gives other people a chance to do some work on
|
||||||
|
the NetWare server when you are copying large files. This has no
|
||||||
|
effect if you are not copying on a NetWare server.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -s
|
||||||
|
.I amount
|
||||||
|
.RS 3
|
||||||
|
Nice time slice factor. Used in conjunction with the
|
||||||
|
.B -n
|
||||||
|
option, this specifies the number of 100K blocks to copy before sleeping.
|
||||||
|
Default is 10. (1 Megabyte)
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH BUGS
|
||||||
|
.B ncopy
|
||||||
|
cannot recurse into directories.
|
||||||
|
Does not work on NetWare volumes mounted with the
|
||||||
|
.I -V
|
||||||
|
option to
|
||||||
|
.B ncpmount.
|
||||||
|
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.B ncpmount(8), ncpumount(8)
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
ncopy was written by Brian G. Reid (breid@tim.com) and Tom
|
||||||
|
C. Henderson (thenderson@tim.com). Many thanks to Volker Lendecke
|
||||||
|
(lendecke@math.uni-goettingen.de) for the ncpfs and ncplib which made
|
||||||
|
ncopy possible.
|
||||||
@@ -57,7 +57,7 @@ protocol Novell NetWare clients use to talk to NetWare servers. ncpfs
|
|||||||
was inspired by
|
was inspired by
|
||||||
.B lwared,
|
.B lwared,
|
||||||
a free NetWare emulator for Linux written by Ales Dryak. See
|
a free NetWare emulator for Linux written by Ales Dryak. See
|
||||||
ftp://klokan.sh.cvut.cz/pub/linux for this very intersting program.
|
ftp://klokan.sh.cvut.cz/pub/linux for this very interesting program.
|
||||||
|
|
||||||
.B ncpmount
|
.B ncpmount
|
||||||
when invoked with all appropriate arguments attaches, logs in and
|
when invoked with all appropriate arguments attaches, logs in and
|
||||||
@@ -83,7 +83,7 @@ If the real uid of the caller is not root,
|
|||||||
checks whether the user is allowed to mount a filesystem on the
|
checks whether the user is allowed to mount a filesystem on the
|
||||||
mount-point. So it should be safe to make
|
mount-point. So it should be safe to make
|
||||||
.B ncpmount
|
.B ncpmount
|
||||||
setuid root. The filesystem stores the uid of the user who called
|
setuid root. The filesystem stores the uid of the user who called
|
||||||
ncpmount. So
|
ncpmount. So
|
||||||
.B ncpumount
|
.B ncpumount
|
||||||
can check whether the caller is allowed to unmount the filesystem.
|
can check whether the caller is allowed to unmount the filesystem.
|
||||||
@@ -271,7 +271,7 @@ of your server.
|
|||||||
.B USER / LOGNAME
|
.B USER / LOGNAME
|
||||||
.RS 3
|
.RS 3
|
||||||
The variables USER or LOGNAME may contain the username of the person
|
The variables USER or LOGNAME may contain the username of the person
|
||||||
using the client. USER is tried first. If it's emtpy, LOGNAME is
|
using the client. USER is tried first. If it's empty, LOGNAME is
|
||||||
tried.
|
tried.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
@@ -291,5 +291,5 @@ The encryption code was taken from Dr. Dobbs's Journal 11/93. There
|
|||||||
Pawel Szczerbina described it in an article on NCP.
|
Pawel Szczerbina described it in an article on NCP.
|
||||||
|
|
||||||
The ncpfs code was initially hacked from smbfs by Volker Lendecke
|
The ncpfs code was initially hacked from smbfs by Volker Lendecke
|
||||||
(lendecke@namu01.gwdg.de). smbfs was put together by Paal-Kr. Engstad
|
(lendecke@math.uni-goettingen.de). smbfs was put together by Paal-Kr. Engstad
|
||||||
(pke@engstad.ingok.hitos.no) and later polished by Volker.
|
(pke@engstad.ingok.hitos.no) and later polished by Volker.
|
||||||
|
|||||||
@@ -219,4 +219,4 @@ printed if a printer operator has put in the correct form.
|
|||||||
.B nwclient(5), slist(1), pqlist(1), ncpmount(8), ncpumount(8)
|
.B nwclient(5), slist(1), pqlist(1), ncpmount(8), ncpumount(8)
|
||||||
|
|
||||||
.SH CREDITS
|
.SH CREDITS
|
||||||
nprint was written by Volker Lendecke (lendecke@namu01.gwdg.de)
|
nprint was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
|
|||||||
@@ -65,14 +65,14 @@ is the name of the server you want to use.
|
|||||||
If the user name your NetWare administrator gave to you differs
|
If the user name your NetWare administrator gave to you differs
|
||||||
from your unix user-id, you should use
|
from your unix user-id, you should use
|
||||||
.B -U
|
.B -U
|
||||||
to tell the server about you NetWare user name.
|
to tell the server about your NetWare user name.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.B -P
|
.B -P
|
||||||
.I password
|
.I password
|
||||||
.RS 3
|
.RS 3
|
||||||
You may want to give the password required by the server on the
|
You may want to give the password required by the server on the
|
||||||
command line. You should be careful to use passwords in scripts.
|
command line. You should be careful about using passwords in scripts.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.B -n
|
.B -n
|
||||||
|
|||||||
69
man/nwauth.1
Normal file
69
man/nwauth.1
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
.TH NWAUTH 1 10/27/1996 nwauth nwauth
|
||||||
|
.SH NAME
|
||||||
|
nwauth \- Verify username/password
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwauth
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwauth
|
||||||
|
does nothing but logging into a NetWare server. If the login was
|
||||||
|
successful, an error code of 0 is returned. If the login was not
|
||||||
|
successful, an error code of 1 is returned. It was designed for
|
||||||
|
use by other programs who want authenticate users via a NetWare
|
||||||
|
server.
|
||||||
|
|
||||||
|
nwauth
|
||||||
|
.B always
|
||||||
|
expects a password on stdin. If the stdin is a tty, then the user is
|
||||||
|
prompted for a password. Otherwise nwauth simply reads stdin for a
|
||||||
|
password.
|
||||||
|
|
||||||
|
.B nwauth
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server and a user name. See nwclient(5) for more
|
||||||
|
information. Please note that the access permissions of .nwclient MUST
|
||||||
|
be 600, for security reasons.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print 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 name
|
||||||
|
.RS 3
|
||||||
|
If the user name your NetWare administrator gave to you differs
|
||||||
|
from your unix user-id, you should use
|
||||||
|
.B -U
|
||||||
|
to tell the server about your NetWare user name.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH SEE ALSO
|
||||||
|
.B nwclient(5)
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
nwauth was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
133
man/nwbocreate.8
Normal file
133
man/nwbocreate.8
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
.TH NWBOCREATE 8 7/9/1996 nwbocreate nwbocreate
|
||||||
|
.SH NAME
|
||||||
|
nwbocreate \- Create a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbocreate
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
] [
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbocreate
|
||||||
|
creates the specified NetWare Bindery Object.
|
||||||
|
|
||||||
|
.B nwbocreate
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbocreate
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be created.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
.RS 3
|
||||||
|
|
||||||
|
Read security and write security may each have one of the following values:
|
||||||
|
|
||||||
|
ANYONE: Anyone may access the object
|
||||||
|
LOGGED: Anyone who is logged in may access the
|
||||||
|
object
|
||||||
|
OBJECT: Anyone who is logged in as the object or
|
||||||
|
SUPERVISOR equivalent may access the
|
||||||
|
object
|
||||||
|
SUPERVISOR: Anyone who is logged in as SUPERVISOR
|
||||||
|
equivalent may access the object
|
||||||
|
NETWARE: Only the Bindery may access the object
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbocreate was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
119
man/nwbols.1
Normal file
119
man/nwbols.1
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
.TH NWBOLS 1 7/9/1996 nwbols nwbols
|
||||||
|
.SH NAME
|
||||||
|
nwbols \- List NetWare Bindery Objects
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbols
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I pattern
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbols
|
||||||
|
lists the specified NetWare Bindery Objects visible for the user.
|
||||||
|
|
||||||
|
.B nwbols
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbols
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -t
|
||||||
|
.I type
|
||||||
|
.RS 3
|
||||||
|
You can restrict the objects listed by specifying the type of the
|
||||||
|
objects to be listed.
|
||||||
|
.I type
|
||||||
|
must be given as a decimal number.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -o
|
||||||
|
.I pattern
|
||||||
|
.RS 3
|
||||||
|
Specifying a pattern is another way to restrict the objects
|
||||||
|
listed. Please note that this pattern is evaluated by the NetWare
|
||||||
|
server. grep would be a better candidate for complex patterns.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, the object's name, its ID and its type are listed by
|
||||||
|
.B nwbols.
|
||||||
|
In the verbose mode, activated by
|
||||||
|
.B -v,
|
||||||
|
the object flags, its security byte and the properties flag is also
|
||||||
|
listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbols was written by Volker Lendecke. See the Changes file of ncpfs
|
||||||
|
for other contributors.
|
||||||
118
man/nwboprops.1
Normal file
118
man/nwboprops.1
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
.TH NWBOPROPS 1 7/9/1996 nwboprops nwboprops
|
||||||
|
.SH NAME
|
||||||
|
nwboprops \- List properies of a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwboprops
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwboprops
|
||||||
|
lists all the properties of the specified NetWare Bindery Objects.
|
||||||
|
|
||||||
|
.B nwboprops
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwboprops
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be inspected.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, only the property name is listed. In verbose mode,
|
||||||
|
activated by
|
||||||
|
.B -v,
|
||||||
|
the property flag, the property security byte and the value flag are
|
||||||
|
also listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwboprops was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
106
man/nwborm.8
Normal file
106
man/nwborm.8
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
.TH NWBORM 8 7/9/1996 nwborm nwborm
|
||||||
|
.SH NAME
|
||||||
|
nwborm \- Remove a NetWare Bindery Object
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwborm
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwborm
|
||||||
|
removes the specified NetWare Bindery Objects.
|
||||||
|
|
||||||
|
.B nwborm
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwborm
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be deleted.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwborm was written by Volker Lendecke with the corresponding Caldera
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
145
man/nwbpadd.8
Normal file
145
man/nwbpadd.8
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
.TH NWBPADD 8 7/9/1996 nwbpadd nwbpadd
|
||||||
|
.SH NAME
|
||||||
|
nwbpadd \- Set the value of a NetWare Bindery Property
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpadd
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
]
|
||||||
|
.B value
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpadd
|
||||||
|
sets the value of a ITEM type property, and adds bindery objects to a
|
||||||
|
SET type property.
|
||||||
|
|
||||||
|
.B nwbpadd
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpadd
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be set.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B value
|
||||||
|
.RS 3
|
||||||
|
If property is of type SET, value is an object id in hexadecimal
|
||||||
|
notation. Otherwise, value is either a string value to be written, or
|
||||||
|
a count of bytes to be written. The latter is assumed if more than one
|
||||||
|
value argument is given. The count is decimal, and the following
|
||||||
|
arguments are interpreted as bytes in hexadecimal notation.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
All these examples assume the existence of the file
|
||||||
|
$HOME/.nwclient. Otherwise, the server and user would have to be
|
||||||
|
specified.
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p groups_i\\'m_in os_hackers
|
||||||
|
|
||||||
|
In this example, user linus is added to the group os_hackers. Please
|
||||||
|
note that the ' has to be quoted.
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p identification "Linus Torvalds"
|
||||||
|
|
||||||
|
User linus is given his real name :-).
|
||||||
|
|
||||||
|
nwbpadd -o linus -t 1 -p revision -v 04 00 00 01 0b
|
||||||
|
|
||||||
|
A new 4-byte binary value 0x0000010b (hi-lo order, no byte-swapping) is added
|
||||||
|
to the "REVISION" property of the user "linus".
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpadd was written by Volker Lendecke with the corresponding Caldera
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
154
man/nwbpcreate.8
Normal file
154
man/nwbpcreate.8
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
.TH NWBPCREATE 8 7/9/1996 nwbpcreate nwbpcreate
|
||||||
|
.SH NAME
|
||||||
|
nwbpcreate \- Create a NetWare Bindery Propery
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpcreate
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
] [
|
||||||
|
.B -s
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
] [
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpcreate
|
||||||
|
creates the specified NetWare Bindery Propery.
|
||||||
|
|
||||||
|
.B nwbpcreate
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpcreate
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be created.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -s
|
||||||
|
.RS 3
|
||||||
|
By default,
|
||||||
|
.B nwbpcreate
|
||||||
|
creates properties of type ITEM. If you want to create a property of
|
||||||
|
type SET, such as groups_i\\'m_in, you must use the
|
||||||
|
.B -s
|
||||||
|
option.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I read-flag
|
||||||
|
|
||||||
|
.B -w
|
||||||
|
.I write-flag
|
||||||
|
.RS 3
|
||||||
|
|
||||||
|
Read security and write security may each have one of the following values:
|
||||||
|
|
||||||
|
ANYONE: Anyone may access the property
|
||||||
|
LOGGED: Anyone who is logged in may access the
|
||||||
|
property
|
||||||
|
OBJECT: Anyone who is logged in as the object or
|
||||||
|
SUPERVISOR equivalent may access the
|
||||||
|
property
|
||||||
|
SUPERVISOR: Anyone who is logged in as SUPERVISOR
|
||||||
|
equivalent may access the property
|
||||||
|
NETWARE: Only the Bindery may access the property
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpcreate was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
116
man/nwbprm.8
Normal file
116
man/nwbprm.8
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
.TH NWBPRM 8 7/9/1996 nwbprm nwbprm
|
||||||
|
.SH NAME
|
||||||
|
nwbprm \- Remove a NetWare Bindery Propery
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbprm
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbprm
|
||||||
|
removes the specified NetWare Bindery Propery.
|
||||||
|
|
||||||
|
.B nwbprm
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbprm
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be touched.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be removed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbprm was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
107
man/nwbpset.1
Normal file
107
man/nwbpset.1
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
.TH NWBPSET 1 8/7/1996 nwbpset nwbpset
|
||||||
|
.SH NAME
|
||||||
|
nwbpset \- Create a bindery property or set its value
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpset
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpset
|
||||||
|
Reads a property specification from the standard input and creates and
|
||||||
|
sets the corresponding property. The format is determined by the
|
||||||
|
output of 'nwbpvalues -c'. nwbpset will hopefully become an important
|
||||||
|
part of the bindery management suite of ncpfs, together with
|
||||||
|
'nwbpvalues -c'. See util/nwbpsecurity for an example.
|
||||||
|
|
||||||
|
As another example, look at the following command line:
|
||||||
|
|
||||||
|
nwbpvalues -t 1 -o supervisor -p user_defaults -c |\\
|
||||||
|
sed '2s/.*/ME/'|\\
|
||||||
|
sed '3s/.*/LOGIN_CONTROL/'|\\
|
||||||
|
nwbpset
|
||||||
|
|
||||||
|
With this command, the property user_defaults of the user object
|
||||||
|
\'supervisor\' is copied into the property login_control of the user
|
||||||
|
object \'me\'.
|
||||||
|
|
||||||
|
nwbpvalues -t 1 -o me -p login_control -c |\\
|
||||||
|
sed '9s/.*/ff/'|\\
|
||||||
|
nwbpset
|
||||||
|
|
||||||
|
This command disables the user object me.
|
||||||
|
|
||||||
|
Feel free to contribute other examples!
|
||||||
|
|
||||||
|
.B nwbpset
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpset
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpset was written by Volker Lendecke. See the Changes file of ncpfs
|
||||||
|
for other contributors.
|
||||||
135
man/nwbpvalues.1
Normal file
135
man/nwbpvalues.1
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
.TH NWBPVALUES 8 7/9/1996 nwbpvalues nwbpvalues
|
||||||
|
.SH NAME
|
||||||
|
nwbpvalues \- Print a NetWare Bindery Propery's contents
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwbpvalues
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
] [
|
||||||
|
.B -c
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwbpvalues
|
||||||
|
prints the contents of a SET property.
|
||||||
|
|
||||||
|
.B nwbpvalues
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwbpvalues
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be looked up.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -p
|
||||||
|
.I property
|
||||||
|
.RS 3
|
||||||
|
The name of the property to be printed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -v
|
||||||
|
.RS 3
|
||||||
|
By default, the object's name, its ID and its type are listed by
|
||||||
|
.B nwbols.
|
||||||
|
In the verbose mode, activated by
|
||||||
|
.B -v,
|
||||||
|
the object flags, its security byte and the properties flag is also
|
||||||
|
listed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -c
|
||||||
|
.RS 3
|
||||||
|
Use canonical output, to be used with nwbpset.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwbpvalues was written by Volker Lendecke with the corresponding
|
||||||
|
Caldera utility in mind. See the Changes file of ncpfs for other
|
||||||
|
contributors.
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH NWCLIENT 5 12/27/1995 nwmount nwmount
|
.TH NWCLIENT 5 12/27/1995 nwclient nwclient
|
||||||
.SH NAME
|
.SH NAME
|
||||||
nwclient \- configuration file for NWClient program suite
|
nwclient \- configuration file for NWClient program suite
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
@@ -35,11 +35,11 @@ An example might be the following:
|
|||||||
# And a passwordless account on another server
|
# And a passwordless account on another server
|
||||||
CD-SERV/GUEST -
|
CD-SERV/GUEST -
|
||||||
|
|
||||||
With these lines in $HOME/.nwclient, calling 'nwmount /mnt' will mount
|
With these lines in $HOME/.nwclient, calling 'ncpmount /mnt' will mount
|
||||||
the the file server FS311 with user name ME on /mnt after asking the
|
the the file server FS311 with user name ME on /mnt after asking the
|
||||||
user for a password.
|
user for a password.
|
||||||
|
|
||||||
\'nwmount -S cd-serv /cd' will silently mount the server cd-serv on /cd.
|
\'ncpmount -S cd-serv /cd' will silently mount the server cd-serv on /cd.
|
||||||
|
|
||||||
.B nprint
|
.B nprint
|
||||||
,
|
,
|
||||||
|
|||||||
52
man/nwfsinfo.1
Normal file
52
man/nwfsinfo.1
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
.TH NWFSINFO 1 07/22/1996 nwfsinfo nwfsinfo
|
||||||
|
.SH NAME
|
||||||
|
nwfsinfo \- Print some information about the file server
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwfsinfo
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
] [
|
||||||
|
.B -i
|
||||||
|
] [
|
||||||
|
.B -d
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwfsinfo
|
||||||
|
prints some of the information the NetWare servers present without
|
||||||
|
logging in. The options control what is printed. You should try the
|
||||||
|
different options to find out what is printed when.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
With -h nwfsinfo prints a little help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
is the name of the server you want to know something about.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.RS 3
|
||||||
|
Print what the file server believes to be the current time.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -d
|
||||||
|
.RS 3
|
||||||
|
Print the so-called file server description strings.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -i
|
||||||
|
.RS 3
|
||||||
|
Print the extended file server information such as NetWare version,
|
||||||
|
maximum connections an others.
|
||||||
|
.RE
|
||||||
85
man/nwfstime.1
Normal file
85
man/nwfstime.1
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
.TH NWFSTIME 1 12/10/1996 nwfstime nwfstime
|
||||||
|
.SH NAME
|
||||||
|
nwfstime \- Display / Set a NetWare server's date and time
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwfstime
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -s
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwfstime
|
||||||
|
displays a NetWare server's date and time. You can also set a NetWare
|
||||||
|
server's date and time from the local time.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
With -h nwfstime prints a little help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user
|
||||||
|
.RS 3
|
||||||
|
.B user
|
||||||
|
is the user name to use for login. To set the server's time, you need
|
||||||
|
supervisor privileges.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwfstime
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login. As you need
|
||||||
|
supervisor privileges for setting the date and time, this option is
|
||||||
|
probably not used very often.
|
||||||
|
.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 -s
|
||||||
|
.RS 3
|
||||||
|
With
|
||||||
|
.B -s,
|
||||||
|
nwfstime sets the file server's date and time according to the local
|
||||||
|
date and time.
|
||||||
|
.RE
|
||||||
148
man/nwgrant.8
Normal file
148
man/nwgrant.8
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
.TH NWGRANT 8 7/9/1996 nwgrant nwgrant
|
||||||
|
.SH NAME
|
||||||
|
nwgrant \- Add Trustee Rights to a directory
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwgrant
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
]
|
||||||
|
.B directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwgrant
|
||||||
|
adds the specified bindery object with the corresponding trustee
|
||||||
|
rights to the directory.
|
||||||
|
|
||||||
|
.B nwgrant
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwgrant
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be added as trustee.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
.RS 3
|
||||||
|
You must tell
|
||||||
|
.B nwgrant
|
||||||
|
which rights it should grant to the bindery object.
|
||||||
|
The new rights for the object is specified by
|
||||||
|
.I rights,
|
||||||
|
which is the sum of the following hexadecimal individual rights values:
|
||||||
|
|
||||||
|
00 = no access
|
||||||
|
01 = read access
|
||||||
|
02 = write access
|
||||||
|
04 = open access
|
||||||
|
08 = create access
|
||||||
|
10 = delete access
|
||||||
|
20 = ownership access
|
||||||
|
40 = search access
|
||||||
|
80 = modify access
|
||||||
|
|
||||||
|
for a possible total of "ff" for all rights.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B directory
|
||||||
|
.RS 3
|
||||||
|
You must specify the directory to which to add the object as
|
||||||
|
trustee. This has to be done in fully qualified NetWare notation.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
nwgrant -o linus -t 1 -r ff 'data:home\\linus'
|
||||||
|
|
||||||
|
With this example, user linus is given all rights to his home
|
||||||
|
directory on the data volume. This example assumes the existence of
|
||||||
|
the file $HOME/.nwclient.
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwgrant was written by Volker Lendecke with the corresponding NetWare
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
|
|
||||||
68
man/nwpasswd.1
Normal file
68
man/nwpasswd.1
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
.TH NWPASSWD 1 01/16/1997 nwpasswd nwpasswd
|
||||||
|
.SH NAME
|
||||||
|
nwpasswd \- Change a user's password
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwpasswd
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -O
|
||||||
|
.I object name
|
||||||
|
]
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
With
|
||||||
|
.B nwpasswd,
|
||||||
|
you can change your password on a NetWare server.
|
||||||
|
.B nwpasswd
|
||||||
|
asks for the old password and twice for the new password. Then it
|
||||||
|
changes the password on the server.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
With -h nwpasswd prints a little help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
.RS 3
|
||||||
|
is the name of the server you want to use.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
.RS 3
|
||||||
|
is the name of the bindery object whose password is to be changed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -O
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
If you have supervisor privileges, you can change other users'
|
||||||
|
passwords. With
|
||||||
|
.B -O
|
||||||
|
you can tell nwpasswd the name of the user whose password should be
|
||||||
|
changed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
is the bindery object type of the object whose password is to be
|
||||||
|
changed.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
nwpasswd would not have been possible without the work of Guntram
|
||||||
|
Blom. Look at nwcrypt.c for his work.
|
||||||
124
man/nwrevoke.8
Normal file
124
man/nwrevoke.8
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
.TH NWREVOKE 8 7/9/1996 nwrevoke nwrevoke
|
||||||
|
.SH NAME
|
||||||
|
nwrevoke \- Revoke a Trustee Right from a directory
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwrevoke
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -o
|
||||||
|
.I object name
|
||||||
|
] [
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.B -r
|
||||||
|
.I rights
|
||||||
|
]
|
||||||
|
.B directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwrevoke
|
||||||
|
revokes the specified bindery object with the corresponding trustee
|
||||||
|
rights from the directory.
|
||||||
|
|
||||||
|
.B nwrevoke
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwrevoke
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -o
|
||||||
|
.I object name
|
||||||
|
.RS 3
|
||||||
|
The name of the object to be added as trustee.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I object type
|
||||||
|
.RS 3
|
||||||
|
The type of the object.
|
||||||
|
.I Object type
|
||||||
|
must be specified as a decimal value. Common values are 1 for user
|
||||||
|
objects, 2 for group objects and 3 for print queues. Other values are
|
||||||
|
allowed, but are usually used for specialized applications.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B directory
|
||||||
|
.RS 3
|
||||||
|
You must specify the directory from which to remove the object as
|
||||||
|
trustee. This has to be done in fully qualified NetWare notation.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
nwrevoke -o linus -t 1 'src:bsd_src'
|
||||||
|
|
||||||
|
With this example, user linus is removed as trustee from the bsd_src
|
||||||
|
directory on the src volume.
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwrevoke was written by Volker Lendecke with the corresponding NetWare
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
|
|
||||||
41
man/nwrights.1
Normal file
41
man/nwrights.1
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
.TH NWRIGHTS 1 8/1/1996 nwrights nwrights
|
||||||
|
.SH NAME
|
||||||
|
nwrights \- Show effective rights for file or directory
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwrights
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
]
|
||||||
|
.B file/directory
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwrights
|
||||||
|
asks the NetWare server for the effective rights the user has for a
|
||||||
|
specific file or directory. The rights the server grants are the
|
||||||
|
definitive restriction for what you may do with files or
|
||||||
|
directories. The Linux permission bits are not really relevant, they
|
||||||
|
can only restrict the possibilities further.
|
||||||
|
|
||||||
|
.B nwrights
|
||||||
|
operates on the current directory or the file or directory that is
|
||||||
|
given as an argument. Certainly the file or directory you specify has
|
||||||
|
to reside on a ncpfs mounted directory for nwrights to work properly.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
|
||||||
|
.B -h
|
||||||
|
.RS 3
|
||||||
|
.B -h
|
||||||
|
is used to print out a short help text.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B file/directory
|
||||||
|
.RS 3
|
||||||
|
You can specify the file or directory you want information about. The
|
||||||
|
default is the current working directory.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwrights was written by Volker Lendecke with the corresponding NetWare
|
||||||
|
utility in mind. See the Changes file of ncpfs for other contributors.
|
||||||
|
|
||||||
36
man/nwsfind.1
Normal file
36
man/nwsfind.1
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
.TH NWSFIND 1 10/27/1996 nwsfind nwsfind
|
||||||
|
.SH NAME
|
||||||
|
nwsfind \- Find a NetWare Server
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwsfind
|
||||||
|
[
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
] [
|
||||||
|
.I name
|
||||||
|
]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwsfind
|
||||||
|
searches for a NetWare server and finds a route to this
|
||||||
|
server. nwsfind was written to be setuid root. It is called from
|
||||||
|
within the ncp library, so that it is possible that normal users use
|
||||||
|
the utilities.
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
.B name
|
||||||
|
.RS 3
|
||||||
|
If you look for a specific server, you should give nwsfind this
|
||||||
|
argument. If you omit it, nwsfind looks for the server nearest to you.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -t
|
||||||
|
.I type
|
||||||
|
.RS 3
|
||||||
|
By default nwsfind looks for file servers. In case you want to look up
|
||||||
|
another server type, you have to specify its numerical type as
|
||||||
|
.B type.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
|
||||||
|
.SH CREDITS
|
||||||
|
nwsfind was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
93
man/nwuserlist.1
Normal file
93
man/nwuserlist.1
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
.TH NWUSERLIST 1 7/22/1996 nwuserlist nwuserlist
|
||||||
|
.SH NAME
|
||||||
|
nwuserlist \- List Users logged in at a NetWare server
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwuserlist
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -a
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwuserlist
|
||||||
|
lists the users logged in at a NetWare server, together with their
|
||||||
|
connection number and their login time.
|
||||||
|
|
||||||
|
.B nwuserlist
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwuserlist
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -a
|
||||||
|
.RS 3
|
||||||
|
With option -a the IPX address of the station the user is logged in
|
||||||
|
from is printed as well.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwuserlist was written by Volker Lendecke. See the Changes file of ncpfs
|
||||||
|
for other contributors.
|
||||||
100
man/nwvolinfo.1
Normal file
100
man/nwvolinfo.1
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
.TH NWVOLINFO 8 7/9/1996 nwvolinfo nwvolinfo
|
||||||
|
.SH NAME
|
||||||
|
nwvolinfo \- Diplay info on NetWare Volumes
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B nwvolinfo
|
||||||
|
[
|
||||||
|
.B -h
|
||||||
|
] [
|
||||||
|
.B -S
|
||||||
|
.I server
|
||||||
|
] [
|
||||||
|
.B -U
|
||||||
|
.I user name
|
||||||
|
] [
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
|
|
||||||
|
.B -n
|
||||||
|
] [
|
||||||
|
.B -C
|
||||||
|
] [
|
||||||
|
.B -v
|
||||||
|
.I volume
|
||||||
|
] [
|
||||||
|
.B -N
|
||||||
|
]
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B nwvolinfo
|
||||||
|
displays information on a NetWare Server Volume.
|
||||||
|
|
||||||
|
.B nwvolinfo
|
||||||
|
looks up the file
|
||||||
|
.I $HOME/.nwclient
|
||||||
|
to find a file server, a user name and possibly a password. See
|
||||||
|
nwclient(5) for more information. Please note that the access
|
||||||
|
permissions of $HOME/.nwclient MUST be 600 for security reasons.
|
||||||
|
|
||||||
|
.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 user name to use for login.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -P
|
||||||
|
.I password
|
||||||
|
.RS 3
|
||||||
|
.B password
|
||||||
|
is the password to use for login. If neither
|
||||||
|
.B -n
|
||||||
|
nor
|
||||||
|
.B -P
|
||||||
|
are given, and the user has no open connection to the server, nwvolinfo
|
||||||
|
prompts for a password.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -n
|
||||||
|
.RS 3
|
||||||
|
.B -n
|
||||||
|
should be given if no password is required for the login.
|
||||||
|
.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 -v
|
||||||
|
.I volume
|
||||||
|
.RS 3
|
||||||
|
The volume name to be used. Defaults to 'SYS'.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.B -N
|
||||||
|
.RS 3
|
||||||
|
Display the information in numeric-only format for use in a pipe.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.SH AUTHORS
|
||||||
|
nwvolinfo was written by Jacek Stepniewski <cunio@gazeta.pl> based on
|
||||||
|
utilities by Volker Lendecke.
|
||||||
@@ -68,14 +68,14 @@ is the name of the server you want to use.
|
|||||||
If the user name your NetWare administrator gave to you differs
|
If the user name your NetWare administrator gave to you differs
|
||||||
from your unix user-id, you should use
|
from your unix user-id, you should use
|
||||||
.B -U
|
.B -U
|
||||||
to tell the server about you NetWare user name.
|
to tell the server about your NetWare user name.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.B -P
|
.B -P
|
||||||
.I password
|
.I password
|
||||||
.RS 3
|
.RS 3
|
||||||
You may want to give the password required by the server on the
|
You may want to give the password required by the server on the
|
||||||
command line. You should be careful to use passwords in scripts.
|
command line. You should be careful about using passwords in scripts.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.B -n
|
.B -n
|
||||||
@@ -102,4 +102,4 @@ this conversion by
|
|||||||
.B nwclient(5), nprint(1), slist(1), ncpmount(8), ncpumount(8)
|
.B nwclient(5), nprint(1), slist(1), ncpmount(8), ncpumount(8)
|
||||||
|
|
||||||
.SH CREDITS
|
.SH CREDITS
|
||||||
pqlist was written by Volker Lendecke (lendecke@namu01.gwdg.de)
|
pqlist was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.TH PSERVER 1 02/10/1996 pserver pserver
|
.TH PSERVER 1 10/22/1996 pserver pserver
|
||||||
.SH NAME
|
.SH NAME
|
||||||
pserver \- NetWare print server
|
pserver \- NetWare print server
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@@ -101,6 +101,13 @@ process, and feeds the job file to stdin.
|
|||||||
.I command
|
.I command
|
||||||
is the printing command that is executed for each job. The default
|
is the printing command that is executed for each job. The default
|
||||||
command is 'lpr'.
|
command is 'lpr'.
|
||||||
|
|
||||||
|
You can insert several flags into the command, preceded by %. These
|
||||||
|
are replaced with values retrieved from the queue structure for the
|
||||||
|
print job.
|
||||||
|
|
||||||
|
%u: This field will be replaced by the name of the user who posted
|
||||||
|
this print job.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
.B -j
|
.B -j
|
||||||
@@ -139,4 +146,4 @@ diagnostic messages that are printed when a error occurs.
|
|||||||
.B nwclient(5), slist(1), pqlist(1), ncpmount(8), ncpumount(8)
|
.B nwclient(5), slist(1), pqlist(1), ncpmount(8), ncpumount(8)
|
||||||
|
|
||||||
.SH CREDITS
|
.SH CREDITS
|
||||||
pserver was written by Volker Lendecke (lendecke@namu01.gwdg.de)
|
pserver was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
|
|||||||
@@ -40,4 +40,4 @@ List all available Netware servers on your Network, that begin with an "I".
|
|||||||
.B ncpmount(8), ncpumount(8), pqlist(1), nprint(1)
|
.B ncpmount(8), ncpumount(8), pqlist(1), nprint(1)
|
||||||
|
|
||||||
.SH CREDITS
|
.SH CREDITS
|
||||||
slist was written by Volker Lendecke (lendecke@namu01.gwdg.de)
|
slist was written by Volker Lendecke (lendecke@math.uni-goettingen.de)
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
Begin3
|
|
||||||
Title: ncpfs
|
|
||||||
Version: 0.19
|
|
||||||
Entered-date: 22. March 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/
|
|
||||||
~103k ncpfs-0.19.tgz
|
|
||||||
~ 1k ncpfs-0.19.lsm
|
|
||||||
Copying-policy: GPL
|
|
||||||
End
|
|
||||||
19
ncpfs-2.0.9.lsm
Normal file
19
ncpfs-2.0.9.lsm
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Begin3
|
||||||
|
Title: ncpfs
|
||||||
|
Version: 2.0.9
|
||||||
|
Entered-date: 16. February 1997
|
||||||
|
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.71 and above. ncpfs does NOT work with any 1.3.x
|
||||||
|
kernel below 1.3.71.
|
||||||
|
Keywords: filesystem ncp novell netware printing
|
||||||
|
Author: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
|
Maintained-by: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
|
Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs
|
||||||
|
Alternate-site: sunsite.unc.edu:/pub/Linux/system/Filesystems/ncpfs
|
||||||
|
~156k ncpfs-2.0.9.tgz
|
||||||
|
~ 1k ncpfs-2.0.9.lsm
|
||||||
|
Copying-policy: GPL
|
||||||
|
End
|
||||||
13
patches/README
Normal file
13
patches/README
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
To apply the patches, cd into the appropriate kernel source directory
|
||||||
|
and do:
|
||||||
|
|
||||||
|
patch -p1 < patch-file
|
||||||
|
|
||||||
|
|
||||||
|
lockup-2.0.28.diff:
|
||||||
|
An *extremely* dirty fix to the lockup bug mentioned in the BUGS
|
||||||
|
file. Please only apply it if you experience the problem. Should apply
|
||||||
|
to 2.0.28 and above in the 2.0.x series. NOT TESTED with 2.1.x.
|
||||||
|
|
||||||
|
linux-2.1.26.diff:
|
||||||
|
Little fix to make ncpfs work with 2.1.26. Sent to Linus.
|
||||||
35
patches/linux-2.1.26.diff
Normal file
35
patches/linux-2.1.26.diff
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
--- 2.1.26/fs/ncpfs/sock.c Sun Jan 26 11:07:44 1997
|
||||||
|
+++ 2.1.26-patched/fs/ncpfs/sock.c Sun Feb 16 17:05:13 1997
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
#include <linux/ncp.h>
|
||||||
|
#include <linux/ncp_fs.h>
|
||||||
|
#include <linux/ncp_fs_sb.h>
|
||||||
|
+#include <linux/poll.h>
|
||||||
|
#include <net/sock.h>
|
||||||
|
|
||||||
|
|
||||||
|
@@ -343,7 +344,6 @@
|
||||||
|
char *start = server->packet;
|
||||||
|
poll_table wait_table;
|
||||||
|
struct poll_table_entry entry;
|
||||||
|
- int (*select) (struct inode *, poll_table *);
|
||||||
|
int init_timeout, max_timeout;
|
||||||
|
int timeout;
|
||||||
|
int retrans;
|
||||||
|
@@ -362,7 +362,6 @@
|
||||||
|
|
||||||
|
file = server->ncp_filp;
|
||||||
|
inode = file->f_inode;
|
||||||
|
- select = file->f_op->poll;
|
||||||
|
sock = &inode->u.socket_i;
|
||||||
|
if (!sock)
|
||||||
|
{
|
||||||
|
@@ -418,7 +417,7 @@
|
||||||
|
wait_table.nr = 0;
|
||||||
|
wait_table.entry = &entry;
|
||||||
|
current->state = TASK_INTERRUPTIBLE;
|
||||||
|
- if (!select(inode, &wait_table))
|
||||||
|
+ if (!(file->f_op->poll(file, &wait_table) & POLLIN))
|
||||||
|
{
|
||||||
|
if (timeout > max_timeout)
|
||||||
|
{
|
||||||
44
patches/lockup-2.0.28.diff
Normal file
44
patches/lockup-2.0.28.diff
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
diff -urN 2.0.11/fs/ncpfs/sock.c linux/fs/ncpfs/sock.c
|
||||||
|
--- 2.0.28/fs/ncpfs/sock.c Fri Jul 12 08:14:53 1996
|
||||||
|
+++ linux/fs/ncpfs/sock.c Thu Aug 8 19:27:26 1996
|
||||||
|
@@ -55,7 +55,8 @@
|
||||||
|
{
|
||||||
|
struct iovec iov;
|
||||||
|
struct msghdr msg;
|
||||||
|
-
|
||||||
|
+ int result;
|
||||||
|
+
|
||||||
|
iov.iov_base = (void *)buff;
|
||||||
|
iov.iov_len = len;
|
||||||
|
|
||||||
|
@@ -65,7 +66,29 @@
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
|
||||||
|
- return sock->ops->sendmsg(sock, &msg, len, nonblock, flags);
|
||||||
|
+ result = sock->ops->sendmsg(sock, &msg, len, 1, flags);
|
||||||
|
+
|
||||||
|
+ if ((result != -EAGAIN) || (nonblock != 0))
|
||||||
|
+ {
|
||||||
|
+ return result;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* The following is probably one of the worst sins you can do
|
||||||
|
+ to a multitasking kernel: active polling. But when you call
|
||||||
|
+ ipx_sendmsg with nonblock==0, then it will block forever
|
||||||
|
+ from time to time. I really do not know why. To work around
|
||||||
|
+ this, I try to send the packet with nonblock=1 and retry
|
||||||
|
+ it. */
|
||||||
|
+
|
||||||
|
+ do {
|
||||||
|
+ /* Before retrying, give others a chance */
|
||||||
|
+ current->state = TASK_INTERRUPTIBLE;
|
||||||
|
+ current->timeout = jiffies + HZ/10;
|
||||||
|
+ schedule();
|
||||||
|
+ result = sock->ops->sendmsg(sock, &msg, len, 1, flags);
|
||||||
|
+ } while (result == -EAGAIN);
|
||||||
|
+
|
||||||
|
+ return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
42
sutil/Makefile
Normal file
42
sutil/Makefile
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#
|
||||||
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
|
#
|
||||||
|
|
||||||
|
UTILS = ncpmount ncpumount nwsfind
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
default:
|
||||||
|
make -C ..
|
||||||
|
|
||||||
|
all: $(UTILS)
|
||||||
|
|
||||||
|
install: all
|
||||||
|
for i in $(UTILS); \
|
||||||
|
do install $$i -m 4755 $(BINDIR); done
|
||||||
|
|
||||||
|
$(UTILS): %: %.o libncp.a
|
||||||
|
$(CC) -o $@ $(addsuffix .o,$@) -L. -lncp -L../lib -lcom_err
|
||||||
|
|
||||||
|
ncplib.o: ncplib.c ncplib.h
|
||||||
|
$(CC) $(CFLAGS) -finline-functions -c ncplib.c
|
||||||
|
|
||||||
|
libncp.a: ncplib.o ../lib/ncplib_err.o
|
||||||
|
ar r libncp.a ncplib.o ../lib/ncplib_err.o
|
||||||
|
|
||||||
|
dep:
|
||||||
|
$(CPP) -M $(INCLUDES) *.c > .depend
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o *~ libncp.a $(UTILS)
|
||||||
|
|
||||||
|
mrproper: clean
|
||||||
|
rm -f .depend
|
||||||
|
|
||||||
|
#
|
||||||
|
# include a dependency file if one exists
|
||||||
|
#
|
||||||
|
ifeq (.depend,$(wildcard .depend))
|
||||||
|
include .depend
|
||||||
|
endif
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user