From 5753870858f7b374907b981bf1a21f662e183643 Mon Sep 17 00:00:00 2001 From: ncpfs archive import Date: Tue, 28 Apr 2026 20:39:57 +0200 Subject: [PATCH] Import ncpfs 0.16 --- .downloads/ncpfs-0.16.tgz | Bin 0 -> 73241 bytes BUGS | 20 ++-- Changes | 11 +++ Makefile | 11 +-- README | 3 +- ipx-1.0/COPYING | 9 ++ ipx-1.0/Gregs.Makefile | 24 +++++ {ipx-0.75 => ipx-1.0}/Makefile | 10 +- {ipx-0.75 => ipx-1.0}/README | 2 +- {ipx-0.75 => ipx-1.0/Samples}/ipxrcv.c | 0 {ipx-0.75 => ipx-1.0/Samples}/ipxsend.c | 0 {ipx-0.75 => ipx-1.0/Samples}/rip.c | 2 +- {ipx-0.75 => ipx-1.0/Samples}/sap.c | 0 ipx-1.0/config.ipx | 7 ++ ipx-1.0/init.ipx | 41 +++++++++ {ipx-0.75 => ipx-1.0}/ipx_configure.c | 5 + {ipx-0.75 => ipx-1.0}/ipx_interface.c | 86 +++++++++++++++++- {ipx-0.75 => ipx-1.0}/ipx_internal_net.c | 5 + {ipx-0.75 => ipx-1.0}/ipx_route.c | 5 + kernel-1.2/src/Makefile | 2 +- kernel-1.2/src/dir.c | 7 +- kernel-1.2/src/inode.c | 1 + kernel-1.2/src/ncplib_kernel.c | 8 +- man/ipx_configure.8 | 19 ++-- man/ipx_interface.8 | 31 ++++--- man/ipx_route.8 | 6 +- man/ncpmount.8 | 9 +- ncpfs-0.15.lsm | 17 ---- ncpfs-0.16.lsm | 19 ++++ util/Makefile | 4 +- util/ncplib.c | 111 ++++++++++++++++++----- util/ncplib.h | 16 ++++ util/ncpmount.c | 32 ++++++- util/ncptest.c | 43 ++++++++- util/pqlist.c | 2 +- 35 files changed, 462 insertions(+), 106 deletions(-) create mode 100644 .downloads/ncpfs-0.16.tgz create mode 100644 ipx-1.0/COPYING create mode 100644 ipx-1.0/Gregs.Makefile rename {ipx-0.75 => ipx-1.0}/Makefile (65%) rename {ipx-0.75 => ipx-1.0}/README (97%) rename {ipx-0.75 => ipx-1.0/Samples}/ipxrcv.c (100%) rename {ipx-0.75 => ipx-1.0/Samples}/ipxsend.c (100%) rename {ipx-0.75 => ipx-1.0/Samples}/rip.c (97%) rename {ipx-0.75 => ipx-1.0/Samples}/sap.c (100%) create mode 100644 ipx-1.0/config.ipx create mode 100644 ipx-1.0/init.ipx rename {ipx-0.75 => ipx-1.0}/ipx_configure.c (95%) rename {ipx-0.75 => ipx-1.0}/ipx_interface.c (76%) rename {ipx-0.75 => ipx-1.0}/ipx_internal_net.c (97%) rename {ipx-0.75 => ipx-1.0}/ipx_route.c (97%) delete mode 100644 ncpfs-0.15.lsm create mode 100644 ncpfs-0.16.lsm diff --git a/.downloads/ncpfs-0.16.tgz b/.downloads/ncpfs-0.16.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cc45754bfcb31d07e254a77e92a785428ca2a3ec GIT binary patch literal 73241 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

0rvl4_QBfw%kY1p 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 D_lDPx literal 0 HcmV?d00001 diff --git a/BUGS b/BUGS index 1f44a88..57790a4 100644 --- a/BUGS +++ b/BUGS @@ -5,12 +5,12 @@ But there are really problems that might be fixed in the future. ------------------------------------------------------------------------------- -'df' returns 0: -Free disk space is distributed among the volumes in NetWare. df is -only able to report one number per mounted filesystem. As connections -are quite expensive for NetWare (with lwared that might change ...), I -rejected the alternative to mount only a single volume for a unix -mount point. So I simply return 0. +'df' returns 0: Free disk space is distributed among the volumes in +NetWare. df is only able to report one number per mounted +filesystem. As connections are quite expensive for NetWare (with +mars_nwe and lwared that might change ...), I rejected the alternative +to mount only a single volume for a unix mount point. So I simply +return 0. ------------------------------------------------------------------------------- @@ -20,11 +20,3 @@ like Nov 25 16:09:08 lx01 kernel: alloc_skb called nonatomically from interrupt 0000002e These are a bit annoying, but completely harmless. - -------------------------------------------------------------------------------- - -ncpfs has a problem with NetWare 4.1, when files are created. I think -NW4.1 does not like some of the creation mode bits. If somebody with -access to a NW4.1 server could compile the kernel module for 1.2 with --DDEBUG_NCP=2, and send me the syslog output gzipped/uuencoded, I -might find out more about that problem. diff --git a/Changes b/Changes index 7e1f2b4..fc712e9 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,17 @@ 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. +ncpfs-0.15 -> ncpfs-0.16 + +- Included ipx-1.0, made available by Greg Page , + Caldera +- Made -n work for password-less accounts. Thanks to Alexander Jolk + . +- Fixed the kerneld support. +- Fixed the NetWare 4.1 problem. Many thanks to + Chatchai JANTARAPRIM and + hitesh.soneji@industry.net for their patience. + ncpfs-0.14 -> ncpfs-0.15 - A bug fixed that made normal mounting impossible. It was too late diff --git a/Makefile b/Makefile index 5d38410..22ef024 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,12 @@ # Makefile for the linux ncp-filesystem routines. # -# KERNEL = 1.2 - +VERSION = 0.16 TOPDIR = $(shell pwd) BINDIR = /usr/local/bin INTERM_BINDIR = $(TOPDIR)/bin -SUBDIRS = util ipx-0.75 man +SUBDIRS = util ipx-1.0 man # # The following 2 lines are for those who use Kernel version 1.2.x. @@ -23,7 +22,7 @@ SUBDIRS = util ipx-0.75 man # uncomment this (kerneld is in linux since about 1.3.57): # KERNELD = -DHAVE_KERNELD -export INCLUDES BINDIR INTERM_BINDIR KERNELD +export INCLUDES BINDIR INTERM_BINDIR KERNELD VERSION all: for i in $(SUBDIRS); do make -C $$i; done @@ -41,7 +40,7 @@ clean: rm -f `find . -type f -name '*.out' -print` for i in $(SUBDIRS); do make -C $$i clean; done -realclean: clean +mrproper: clean rm -fr $(INTERM_BINDIR)/* ncpfs.tgz make -C util realclean @@ -55,7 +54,7 @@ dist: tgz make dep make all -tgz: realclean +tgz: mrproper (cd ..; \ tar cvf - $(SRCDIR) | \ gzip -9 > $(DISTFILE); \ diff --git a/README b/README index 7136095..c8fc29a 100644 --- a/README +++ b/README @@ -1,6 +1,7 @@ This is ncpfs, a free NetWare client filesystem for Linux. Besides some little utilities it also contains nprint, which enables you to -print on NetWare print queues. +print on NetWare print queues. The opposite side, pserver, is also +provided. INSTALLATION diff --git a/ipx-1.0/COPYING b/ipx-1.0/COPYING new file mode 100644 index 0000000..3e71660 --- /dev/null +++ b/ipx-1.0/COPYING @@ -0,0 +1,9 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the original work is +properly attributed to Greg Page and Caldera, Inc. +Neither the name of Greg Page nor Caldera, Inc. may be used to +endorse or promote products derived from this software without +specific prior written permission. +This software is provided by Greg Page and Caldera, Inc. "AS IS" +and without any express or implied warranties. + diff --git a/ipx-1.0/Gregs.Makefile b/ipx-1.0/Gregs.Makefile new file mode 100644 index 0000000..ca4e086 --- /dev/null +++ b/ipx-1.0/Gregs.Makefile @@ -0,0 +1,24 @@ +CFLAGS = -O2 -Wall +UTILS = ipx_configure ipx_interface ipx_internal_net ipx_route +all: $(UTILS) + +clean: + rm -f $(UTILS) *.o rip sap ipxrcv ipxsend + +install: $(UTILS) + for i in $(UTILS); \ + do \ + install --strip $$i /sbin; \ + install $$i.8 /usr/man/man8; \ + done + install init.ipx /etc/rc.d/init.d/ipx + install -m 0644 config.ipx /etc/sysconfig/ipx + rm -f /etc/rc.d/rc2.d/S15ipx + ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc2.d/S15ipx + rm -f /etc/rc.d/rc3.d/S15ipx + ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc3.d/S15ipx + rm -f /etc/rc.d/rc5.d/S15ipx + ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc5.d/S15ipx + rm -f /etc/rc.d/rc6.d/K55ipx + ln -sf /etc/rc.d/init.d/ipx /etc/rc.d/rc6.d/K55ipx + diff --git a/ipx-0.75/Makefile b/ipx-1.0/Makefile similarity index 65% rename from ipx-0.75/Makefile rename to ipx-1.0/Makefile index 02fd3aa..47b4a18 100644 --- a/ipx-0.75/Makefile +++ b/ipx-1.0/Makefile @@ -5,16 +5,16 @@ UTILS = $(INTERM_BINDIR)/ipx_configure $(INTERM_BINDIR)/ipx_interface \ all: $(UTILS) $(INTERM_BINDIR)/ipx_configure: ipx_configure.o - $(CC) -s -o $(INTERM_BINDIR)/ipx_configure ipx_configure.o + $(CC) -o $(INTERM_BINDIR)/ipx_configure ipx_configure.o $(INTERM_BINDIR)/ipx_interface: ipx_interface.o - $(CC) -s -o $(INTERM_BINDIR)/ipx_interface ipx_interface.o + $(CC) -o $(INTERM_BINDIR)/ipx_interface ipx_interface.o $(INTERM_BINDIR)/ipx_internal_net: ipx_internal_net.o - $(CC) -s -o $(INTERM_BINDIR)/ipx_internal_net ipx_internal_net.o + $(CC) -o $(INTERM_BINDIR)/ipx_internal_net ipx_internal_net.o $(INTERM_BINDIR)/ipx_route: ipx_route.o - $(CC) -s -o $(INTERM_BINDIR)/ipx_route ipx_route.o + $(CC) -o $(INTERM_BINDIR)/ipx_route ipx_route.o dep: $(CPP) -M $(INCLUDES) *.c > .depend @@ -25,6 +25,6 @@ clean: install: $(UTILS) for i in $(UTILS); \ do \ - install --strip $$i $(BINDIR); \ + install $$i $(BINDIR); \ done diff --git a/ipx-0.75/README b/ipx-1.0/README similarity index 97% rename from ipx-0.75/README rename to ipx-1.0/README index dcc4e88..0623dd5 100644 --- a/ipx-0.75/README +++ b/ipx-1.0/README @@ -47,7 +47,7 @@ This program is used to read/write two configuration parameters: By default, these are both turned off. -The following are sample IPX programs: +The following are sample IPX programs (found in directory Samples): ipxrcv.c and ipxsend.c ipxsend will send a single packet to an instance of ipxrcv running on the diff --git a/ipx-0.75/ipxrcv.c b/ipx-1.0/Samples/ipxrcv.c similarity index 100% rename from ipx-0.75/ipxrcv.c rename to ipx-1.0/Samples/ipxrcv.c diff --git a/ipx-0.75/ipxsend.c b/ipx-1.0/Samples/ipxsend.c similarity index 100% rename from ipx-0.75/ipxsend.c rename to ipx-1.0/Samples/ipxsend.c diff --git a/ipx-0.75/rip.c b/ipx-1.0/Samples/rip.c similarity index 97% rename from ipx-0.75/rip.c rename to ipx-1.0/Samples/rip.c index 762df7d..12d6e85 100644 --- a/ipx-0.75/rip.c +++ b/ipx-1.0/Samples/rip.c @@ -51,7 +51,7 @@ main(int argc, char **argv) htonl(sipx.sipx_network), sipx.sipx_node[0], sipx.sipx_node[1], sipx.sipx_node[2], sipx.sipx_node[3], - sipx.sipx_node[4], sipx.sipx_node[5]); + sipx.sipx_node[6], sipx.sipx_node[5]); bptr += 2; rp = (struct rip_data *) bptr; while (result >= sizeof(struct rip_data)) { diff --git a/ipx-0.75/sap.c b/ipx-1.0/Samples/sap.c similarity index 100% rename from ipx-0.75/sap.c rename to ipx-1.0/Samples/sap.c diff --git a/ipx-1.0/config.ipx b/ipx-1.0/config.ipx new file mode 100644 index 0000000..974a7ee --- /dev/null +++ b/ipx-1.0/config.ipx @@ -0,0 +1,7 @@ +IPX_AUTO_PRIMARY=on +IPX_AUTO_INTERFACE=on +IPX_CONFIGURED=no +IPX_DEVICE=eth0 +IPX_FRAME=802.2 +IPX_INTERNAL_NET=no +IPX_NETNUM=0 diff --git a/ipx-1.0/init.ipx b/ipx-1.0/init.ipx new file mode 100644 index 0000000..d53fc2b --- /dev/null +++ b/ipx-1.0/init.ipx @@ -0,0 +1,41 @@ +#!/bin/sh +# +# ipx Bring up/down IPX networking +# + +# Source function library. +. /etc/rc.d/init.d/functions + +. /etc/sysconfig/network +. /etc/sysconfig/ipx + +# Check that networking is up. +[ ${NETWORKING} = "no" ] && exit 0 + +# See how we were called. +case "$1" in + start) + if [ ${IPX_CONFIGURED} = "yes" ]; then + if [ ${IPX_INTERNAL_NET} = "yes" ]; then + /sbin/ipx_internal_net add ${IPX_NETNUM} + else + /sbin/ipx_interface add -p ${IPX_DEVICE} \ + ${IPX_FRAME} ${IPX_NETNUM} + fi + fi + ipx_configure \ + --auto_primary=${IPX_AUTO_PRIMARY} \ + --auto_interface=${IPX_AUTO_INTERFACE} + touch /var/lock/subsys/ipx + ;; + stop) + ipx_configure --auto_primary=off --auto_interface=off + ipx_interface delall + rm -f /var/lock/subsys/ipx + ;; + *) + echo "Usage: network {start|stop}" + exit 1 +esac + +exit 0 diff --git a/ipx-0.75/ipx_configure.c b/ipx-1.0/ipx_configure.c similarity index 95% rename from ipx-0.75/ipx_configure.c rename to ipx-1.0/ipx_configure.c index c2b00ca..ba93a2b 100644 --- a/ipx-0.75/ipx_configure.c +++ b/ipx-1.0/ipx_configure.c @@ -1,3 +1,8 @@ +/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved. + * + * See file COPYING for details. + */ + #include #include #include diff --git a/ipx-0.75/ipx_interface.c b/ipx-1.0/ipx_interface.c similarity index 76% rename from ipx-0.75/ipx_interface.c rename to ipx-1.0/ipx_interface.c index ec67751..bbf9776 100644 --- a/ipx-0.75/ipx_interface.c +++ b/ipx-1.0/ipx_interface.c @@ -1,3 +1,8 @@ +/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved. + * + * See file COPYING for details. + */ + #include #include #include @@ -19,7 +24,8 @@ usage(void) { fprintf(stderr, "Usage: %s add [-p] device frame_type [net_number]\n\ Usage: %s del device frame_type\n\ -Usage: %s check device frame_type\n", progname, progname, progname); +Usage: %s delall\n\ +Usage: %s check device frame_type\n", progname, progname, progname, progname); exit(-1); } @@ -28,6 +34,9 @@ struct frame_type { unsigned char ft_val; } frame_types[] = { {"802.2", IPX_FRAME_8022}, +#ifdef IPX_FRAME_TR_8022 + {"802.2TR", IPX_FRAME_TR_8022}, +#endif {"802.3", IPX_FRAME_8023}, {"SNAP", IPX_FRAME_SNAP}, {"EtherII", IPX_FRAME_ETHERII} @@ -162,6 +171,76 @@ ipx_add_interface(int argc, char **argv) exit(-1); } +int +ipx_delall_interface(int argc, char **argv) +{ + struct sockaddr_ipx *sipx = (struct sockaddr_ipx *)&id.ifr_addr; + int s; + int result; + char errmsg[80]; + char buffer[80]; + char device[20]; + char frame_type[20]; + int fti; + FILE *fp; + + s = socket(AF_IPX, SOCK_DGRAM, AF_IPX); + if (s < 0) { + sprintf(errmsg, "%s: socket", progname); + perror(errmsg); + exit(-1); + } + + fp = fopen("/proc/net/ipx_interface", "r"); + if (fp == NULL) { + fprintf(stderr, + "%s: Unable to open \"/proc/net/ipx_interface.\"\n", + progname); + exit(-1); + } + + fgets(buffer, 80, fp); + while (fscanf(fp, "%s %s %s %s %s", buffer, buffer, buffer, + device, frame_type) == 5) { + + sipx->sipx_network = 0L; + if (strcasecmp(device, "Internal") == 0) { + sipx->sipx_special = IPX_INTERNAL; + } else { + sipx->sipx_special = IPX_SPECIAL_NONE; + strcpy(id.ifr_name, device); + fti = lookup_frame_type(frame_type); + if (fti < 0) continue; + sipx->sipx_type = frame_types[fti].ft_val; + } + + sipx->sipx_action = IPX_DLTITF; + sipx->sipx_family = AF_IPX; + result = ioctl(s, SIOCSIFADDR, &id); + if (result == 0) continue; + switch (errno) { + case EPROTONOSUPPORT: + fprintf(stderr, "%s: Invalid frame type (%s).\n", + progname, frame_type); + break; + case ENODEV: + fprintf(stderr, "%s: No such device (%s).\n", + progname, device); + break; + case EINVAL: + fprintf(stderr, "%s: No such IPX interface %s %s.\n", + progname, device, frame_type); + break; + default: + sprintf(errmsg, "%s: ioctl", progname); + perror(errmsg); + break; + } + } + + exit(0); +} + int ipx_del_interface(int argc, char **argv) { @@ -176,6 +255,7 @@ ipx_del_interface(int argc, char **argv) } sipx->sipx_network = 0L; + sipx->sipx_special = IPX_SPECIAL_NONE; strcpy(id.ifr_name, argv[1]); fti = lookup_frame_type(argv[2]); if (fti < 0) @@ -289,6 +369,10 @@ main(int argc, char **argv) for (i = 1; i < (argc-1); i++) argv[i] = argv[i+1]; ipx_add_interface(argc-1, argv); + } else if (strncasecmp(argv[1], "delall", 6) == 0) { + for (i = 1; i < (argc-1); i++) + argv[i] = argv[i+1]; + ipx_delall_interface(argc-1, argv); } else if (strncasecmp(argv[1], "del", 3) == 0) { for (i = 1; i < (argc-1); i++) argv[i] = argv[i+1]; diff --git a/ipx-0.75/ipx_internal_net.c b/ipx-1.0/ipx_internal_net.c similarity index 97% rename from ipx-0.75/ipx_internal_net.c rename to ipx-1.0/ipx_internal_net.c index 54cb234..2cad875 100644 --- a/ipx-0.75/ipx_internal_net.c +++ b/ipx-1.0/ipx_internal_net.c @@ -1,3 +1,8 @@ +/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved. + * + * See file COPYING for details. + */ + #include #include #include diff --git a/ipx-0.75/ipx_route.c b/ipx-1.0/ipx_route.c similarity index 97% rename from ipx-0.75/ipx_route.c rename to ipx-1.0/ipx_route.c index 1e991c0..e280ac2 100644 --- a/ipx-0.75/ipx_route.c +++ b/ipx-1.0/ipx_route.c @@ -1,3 +1,8 @@ +/* Copyright (c) 1995-1996 Caldera, Inc. All Rights Reserved. + * + * See file COPYING for details. + */ + #include #include #include diff --git a/kernel-1.2/src/Makefile b/kernel-1.2/src/Makefile index a12973b..2bfa208 100644 --- a/kernel-1.2/src/Makefile +++ b/kernel-1.2/src/Makefile @@ -3,7 +3,7 @@ # CFLAGS = -Wall -Wstrict-prototypes -O2 -DMODULE -fomit-frame-pointer \ - $(INCLUDES) \ + $(INCLUDES) -DNCPFS_VERSION=\"$(VERSION)\"\ # -DDEBUG_NCP=1 -DDEBUG_NCP_MALLOC # -DDEBUG_NCP_MALLOC diff --git a/kernel-1.2/src/dir.c b/kernel-1.2/src/dir.c index 91c4058..5747571 100644 --- a/kernel-1.2/src/dir.c +++ b/kernel-1.2/src/dir.c @@ -797,7 +797,8 @@ ncp_create(struct inode *dir, const char *name, int len, int mode, if (ncp_open_create_file_or_subdir(NCP_SERVER(dir), NCP_ISTRUCT(dir), _name, - OC_MODE_CREATE|OC_MODE_OPEN, + OC_MODE_CREATE|OC_MODE_OPEN| + OC_MODE_REPLACE, 0, AR_READ|AR_WRITE, &finfo) != 0) { @@ -895,7 +896,7 @@ ncp_rmdir(struct inode *dir, const char *name, int len) } else { - error = -EINVAL; + error = -EACCES; } } iput(dir); @@ -932,7 +933,7 @@ ncp_unlink(struct inode *dir, const char *name, int len) } else { - error = -EINVAL; + error = -EACCES; } } iput(dir); diff --git a/kernel-1.2/src/inode.c b/kernel-1.2/src/inode.c index 95d2582..f85fe62 100644 --- a/kernel-1.2/src/inode.c +++ b/kernel-1.2/src/inode.c @@ -510,6 +510,7 @@ init_module( void) ncp_init_dir_cache(); register_filesystem(&ncp_fs_type); + printk("ncpfs version %s loaded\n", NCPFS_VERSION); return 0; } diff --git a/kernel-1.2/src/ncplib_kernel.c b/kernel-1.2/src/ncplib_kernel.c index f163f26..bcbd667 100644 --- a/kernel-1.2/src/ncplib_kernel.c +++ b/kernel-1.2/src/ncplib_kernel.c @@ -417,12 +417,18 @@ ncp_open_create_file_or_subdir(struct ncp_server *server, struct nw_file_info *target) { int result; + __u16 search_attribs = 0x0006; + + if ((create_attributes & aDIR) != 0) + { + search_attribs |= 0x8000; + } ncp_init_request(server); ncp_add_byte(server, 1); /* subfunction */ ncp_add_byte(server, 0); /* dos name space */ ncp_add_byte(server, open_create_mode); - ncp_add_word(server, 0x8006); + ncp_add_word(server, search_attribs); ncp_add_dword(server, RIM_ALL); ncp_add_dword(server, create_attributes); /* The desired acc rights seem to be the inherited rights mask diff --git a/man/ipx_configure.8 b/man/ipx_configure.8 index 0caf463..8bb1c96 100644 --- a/man/ipx_configure.8 +++ b/man/ipx_configure.8 @@ -1,6 +1,6 @@ .TH IPX_CONFIGURE 8 "IPX Utilities" "Caldera, Inc." .SH NAME -ipx_configure \- display/configure IPX behavior +ipx_configure \- query/configure IPX behavior .SH SYNOPSIS .B ipx_configure [\-\-help] @@ -8,7 +8,7 @@ ipx_configure \- display/configure IPX behavior [\-\-auto_primary=[on|off]] .SH DESCRIPTION .B ipx_configure -displays or configures IPX behavior with respect to automatic IPX +queries or configures IPX behavior with respect to automatic IPX interface detection. IPX can be configured to automatically create interfaces as they are detected. It can also be configured to automatically select a primary interface when none is explicitly @@ -23,20 +23,15 @@ arguments is described in the section .SS OPTIONS .TP .I "\-\-auto_interface=[on|off]" -This argument enables or disables the feature that will automatically detect -whether IPX is use on a network interface. If -.B on -and IPX packets are seen on an interface that interface will be automatically -flagged as an IPX interface. The default setting is -.B off. +This argument either turns on or off the behavior of automatically creating +interfaces. .TP .I "\-\-auto_primary=[on|off]" -This argument enables or disables the feature that will automatically select -which IPX interface will be the primary IPX interface. The default setting is -.B off. +This argument either turns on or off the behavior of automatically selecting +a primary interface. .TP .I "\-\-help" -Displays summarised usage instructions. +Print out information about utility. .SH FILES .I /proc/net/ipx_interface .SH BUGS diff --git a/man/ipx_interface.8 b/man/ipx_interface.8 index 0e93a33..96923c5 100644 --- a/man/ipx_interface.8 +++ b/man/ipx_interface.8 @@ -1,6 +1,6 @@ .TH IPX_INTERFACE 8 "IPX Utilities" "Caldera, Inc." .SH NAME -ipx_interface \- add, delete, or display IPX interface configuration. +ipx_interface \- add, delete, or display an IPX interface .SH SYNOPSIS .B ipx_interface add [-p] device frame_type [network number] @@ -9,17 +9,20 @@ add [-p] device frame_type [network number] del device frame_type .LP .B ipx_interface +delall +.LP +.B ipx_interface check device frame_type .LP .B ipx_interface help .SH DESCRIPTION .B ipx_interface -adds, deletes, or displays the configuration of the specified IPX interface. +adds, deletes, or displays IPX interfaces depending on the option selected. .P An IPX interface is the item to which IPX sockets are bound. -An IPX interface has an associated IPX Network Number, a physical device -and frame type. A sample IPX Interface might look like: +An IPX interface corresponds to an IPX Network Number which corresponds +to a physical device and frame type. A sample IPX Interface would be: .LP Network Number: 0x00ABCDEF .LP @@ -35,21 +38,25 @@ or default interface. .I add This option is used to create an IPX interface. If the .B -p -flag is used, the interface is flagged as the -.B PRIMARY -interface. The IPX network number may optionally be specified. If it is not -specified it is set to 0 which indicates it should be automatically detected -by analysis of the existing IPX traffic on the network. +flag is used, the interface is made +.B +PRIMARY. +The network number can be optionally assigned. If it is not assigned, it +is set to 0 which indicates it should be detected from the traffic on the +network. .TP .I del This option is used to delete an IPX interface. .TP +.I delall +This option is used to delete all IPX interfaces. +.TP .I check -This option is used to display the network number associated with a specified -device and frame type combination. +This option is used to display the device, frame type, and network number +of an IPX interface. .TP .I help -This option displays summarised usage instructions. +This option displays information about the utility. .SH FILES .I /proc/net/ipx_interface /proc/net/ipx_route .SH BUGS diff --git a/man/ipx_route.8 b/man/ipx_route.8 index 011e7bf..2f8eb3e 100644 --- a/man/ipx_route.8 +++ b/man/ipx_route.8 @@ -1,6 +1,6 @@ .TH IPX_ROUTE 8 "IPX Utilities" "Caldera, Inc." .SH NAME -ipx_route \- add or delete an IPX route. +ipx_route \- add or delete IPX route .SH SYNOPSIS .B ipx_route add target_network router_network router_node @@ -10,11 +10,11 @@ del target_network .SH DESCRIPTION .B ipx_route adds or deletes an IPX route. -The kernel IPX software stores only one route to any target network. +The kernel IPX stores only one route per target network at a time. .SS OPTIONS .TP .I add -This option is used to configure a route to a target network. +This option is used to set up the route to a target network. .TP .I del This option is used to delete the route to a target network. diff --git a/man/ncpmount.8 b/man/ncpmount.8 index 847588c..e15b1ef 100644 --- a/man/ncpmount.8 +++ b/man/ncpmount.8 @@ -33,7 +33,9 @@ ncpmount \- mount all volumes of a specified Novell fileserver. ] [ .B -d .I dir mode -] +] [ +.B -v +] mount-point .SH DESCRIPTION @@ -186,6 +188,11 @@ can very well choose a file mode that tells that you have. This certainly cannot override the restrictions imposed by the server. .RE +.B -v +.RS 3 +Print ncpfs version number +.RE + .SH NOTES You must configure the IPX subsystem before ncpmount will work. It is especially important that there is a route to the internal network diff --git a/ncpfs-0.15.lsm b/ncpfs-0.15.lsm deleted file mode 100644 index 8468d36..0000000 --- a/ncpfs-0.15.lsm +++ /dev/null @@ -1,17 +0,0 @@ -Begin3 -Title: ncpfs -Version: 0.15 -Entered-date: 10. February 1996 -Description: With ncpfs you can mount volumes of your novell - server under Linux. You need kernel 1.2.x or - 1.3.54 and above. ncpfs does NOT work with any 1.3.x - kernel below 1.3.54. -Keywords: filesystem kernel ncp novell netware -Author: lendecke@namu01.gwdg.de (Volker Lendecke) -Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke) -Primary-site: linux01.gwdg.de:/pub/ncpfs -Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ - ~70k ncpfs-0.15.tgz - ~ 1k ncpfs-0.15.lsm -Copying-policy: GPL -End diff --git a/ncpfs-0.16.lsm b/ncpfs-0.16.lsm new file mode 100644 index 0000000..1476842 --- /dev/null +++ b/ncpfs-0.16.lsm @@ -0,0 +1,19 @@ +Begin3 +Title: ncpfs +Version: 0.16 +Entered-date: 21. February 1996 +Description: With ncpfs you can mount volumes of your netware + server under Linux. You can also print to netware + print queues and spool netware print queues to the + Linux printing system. You need kernel 1.2.x or + 1.3.54 and above. ncpfs does NOT work with any 1.3.x + kernel below 1.3.54. +Keywords: filesystem ncp novell netware printing +Author: lendecke@namu01.gwdg.de (Volker Lendecke) +Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke) +Primary-site: linux01.gwdg.de:/pub/ncpfs +Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ + ~73k ncpfs-0.16.tgz + ~ 1k ncpfs-0.16.lsm +Copying-policy: GPL +End diff --git a/util/Makefile b/util/Makefile index cbedae8..bb42bbb 100644 --- a/util/Makefile +++ b/util/Makefile @@ -6,8 +6,8 @@ UTIL_EXECS = ncpmount ncpumount nprint slist pqlist fsinfo pserver UTILS = $(addprefix $(INTERM_BINDIR)/,$(UTIL_EXECS)) UIDUTILS = ncpmount ncpumount -#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 +#CFLAGS = -Wall $(INCLUDES) $(KERNELD) -g -DNCPFS_VERSION=\"$(VERSION)\" +CFLAGS = -Wall $(INCLUDES) $(KERNELD) -O2 -DNCPFS_VERSION=\"$(VERSION)\" CC = gcc all: $(UTILS) ncptest diff --git a/util/ncplib.c b/util/ncplib.c index 0d72c73..949d1af 100644 --- a/util/ncplib.c +++ b/util/ncplib.c @@ -1237,35 +1237,36 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password, } fclose(nwc); } + } - if (strlen(spec.user) == 0) + + if (strlen(spec.user) == 0) + { + return &spec; + } + + if (strlen(spec.password) == 0) + { + char *password; + if (!(isatty(0) && isatty(1))) { - return &spec; + return NULL; } + printf("Logging into %s as %s\n", + spec.server, spec.user); - if (strlen(spec.password) == 0) + password = getpass("Password: "); + if (strlen(password) > sizeof(spec.password)) { - char *password; - if (!(isatty(0) && isatty(1))) - { - return NULL; - } - printf("Logging into %s as %s\n", - spec.server, spec.user); - - password = getpass("Password: "); - if (strlen(password) > sizeof(spec.password)) - { - return NULL; - } - strcpy(spec.password, password); + return NULL; } - else + strcpy(spec.password, password); + } + else + { + if (strcmp(spec.password, NWC_NOPASSWORD) == 0) { - if (strcmp(spec.password, NWC_NOPASSWORD) == 0) - { - *spec.password = '\0'; - } + *spec.password = '\0'; } } @@ -1349,6 +1350,7 @@ ncp_initialize_as(struct ncp_conn *conn, { return -1; } + password = NWC_NOPASSWORD; continue; } i += 1; @@ -2739,3 +2741,68 @@ ncp_write(struct ncp_conn *conn, const char *file_id, } return already_written; } + +int +ncp_get_broadcast_message(struct ncp_conn *conn, char message[256]) +{ + int result; + int length; + + ncp_init_request_s(conn, 1); + + if ((result = ncp_request(conn, 21)) != 0) + { + ncp_unlock_conn(conn); + return result; + } + + length = ncp_reply_byte(conn, 0); + message[length] = 0; + memcpy(message, ncp_reply_data(conn, 1), length); + ncp_unlock_conn(conn); + return 0; +} + +int +ncp_dealloc_dir_handle(struct ncp_conn *conn, __u8 dir_handle) +{ + int result; + + ncp_init_request_s(conn, 20); + ncp_add_byte(conn, dir_handle); + + if ((result = ncp_request(conn, 22)) != 0) + { + ncp_unlock_conn(conn); + return result; + } + ncp_unlock_conn(conn); + return 0; +} + +int +ncp_alloc_short_dir_handle(struct ncp_conn *conn, + struct nw_info_struct *dir, + word alloc_mode, + byte *target) +{ + int result; + + ncp_init_request(conn); + ncp_add_byte(conn, 12); /* subfunction */ + ncp_add_byte(conn, 0); /* dos name space */ + ncp_add_byte(conn, 0); /* reserved */ + ncp_add_word(conn, htons(alloc_mode)); + ncp_add_handle_path(conn, dir->volNumber, dir->DosDirNum, + 1, NULL); + + if ((result = ncp_request(conn, 87)) != 0) + { + ncp_unlock_conn(conn); + return result; + } + + *target = ncp_reply_byte(conn, 0); + ncp_unlock_conn(conn); + return result; +} diff --git a/util/ncplib.h b/util/ncplib.h index 2483b09..942e4f1 100644 --- a/util/ncplib.h +++ b/util/ncplib.h @@ -328,4 +328,20 @@ int ncp_abort_servicing_job(struct ncp_conn *conn, __u32 queue_id, __u32 job_number); +int +ncp_get_broadcast_message(struct ncp_conn *conn, char message[256]); + +int +ncp_dealloc_dir_handle(struct ncp_conn *conn, __u8 dir_handle); + +#define NCP_ALLOC_PERMANENT (0x0000) +#define NCP_ALLOC_TEMPORARY (0x0001) +#define NCP_ALLOC_SPECIAL (0x0002) + +int +ncp_alloc_short_dir_handle(struct ncp_conn *conn, + struct nw_info_struct *dir, + __u16 alloc_mode, + __u8 *target); + #endif /* _NCPLIB_H */ diff --git a/util/ncpmount.c b/util/ncpmount.c index a791945..ba275c9 100644 --- a/util/ncpmount.c +++ b/util/ncpmount.c @@ -191,10 +191,11 @@ main(int argc, char *argv[]) umask(um); data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & ~um; data.dir_mode = 0; + data.flags |= NCP_MOUNT_SOFT; upcase_password = 1; - while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nh")) != EOF) + while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nhv")) != EOF) { switch (opt) { @@ -290,6 +291,9 @@ main(int argc, char *argv[]) case 'h': help(); exit(1); + case 'v': + fprintf(stderr, "ncpfs version %s\n", NCPFS_VERSION); + exit(1); default: usage(); return -1; @@ -423,6 +427,31 @@ main(int argc, char *argv[]) exit(1); } +#if NCP_MOUNT_VERSION>1 + + data.message_fd = socket(AF_IPX, SOCK_DGRAM, PF_IPX); + if (data.message_fd == -1) + { + fprintf(stderr, "could not open message socket: %s\n", + strerror(errno)); + exit(1); + } + + addr.sipx_port = htons(ntohs(addr.sipx_port) + 1); + + if (bind(data.message_fd, (struct sockaddr *)&addr,sizeof(addr)) == -1) + { + fprintf(stderr, "bind(message_sock, ): %s\n", + strerror(errno)); + exit(1); + } + + if (strlen(mount_point) < sizeof(data.mount_point)) + { + strcpy(data.mount_point, mount_point); + } +#endif + flags = MS_MGC_VAL; data.time_out = 20; @@ -518,5 +547,6 @@ help(void) " If neither -P nor -n are given, you are\n" " asked for a password.\n" "-h print this help text\n" + "-v print ncpfs version number\n" "\n"); } diff --git a/util/ncptest.c b/util/ncptest.c index 1127fcd..54637a6 100644 --- a/util/ncptest.c +++ b/util/ncptest.c @@ -147,6 +147,47 @@ test_connlist(struct ncp_conn *conn) return; } +void +test_create(struct ncp_conn *conn) +{ + struct nw_info_struct sys; + struct nw_info_struct me; + __u8 dir_handle; + struct ncp_file_info new_file; + + if (ncp_do_lookup(conn, NULL, "SYS", &sys) != 0) + { + printf("lookup error\n"); + return; + } + if (ncp_do_lookup(conn, &sys, "ME", &me) != 0) + { + printf("lookup public error\n"); + return; + } + + if (ncp_alloc_short_dir_handle(conn, &me, NCP_ALLOC_TEMPORARY, + &dir_handle) != 0) + { + printf("alloc_dir_handle error\n"); + return; + } + + if (ncp_create_file(conn, dir_handle, "BLUB.TXT", 0, + &new_file) != 0) + { + printf("create error\n"); + return; + } + + if (ncp_dealloc_dir_handle(conn, dir_handle) != 0) + { + printf("dealloc error\n"); + return; + } +} + + int main(int argc, char *argv[]) { @@ -158,7 +199,7 @@ main(int argc, char *argv[]) return 1; } - test_connlist(&conn); + test_create(&conn); ncp_close(&conn); return 0; } diff --git a/util/pqlist.c b/util/pqlist.c index 7fd4421..0449326 100644 --- a/util/pqlist.c +++ b/util/pqlist.c @@ -62,7 +62,7 @@ main(int argc, char **argv) { found = 1; printf("%-52s", q.object_name); - printf("%08x\n", q.object_id); + printf("%08X\n", q.object_id); } if ((found == 0) && (isatty(1)))