diff --git a/.downloads/ncpfs-0.18.tgz b/.downloads/ncpfs-0.18.tgz new file mode 100644 index 0000000..c2c13fa Binary files /dev/null and b/.downloads/ncpfs-0.18.tgz differ diff --git a/Changes b/Changes index 8fbd2d2..47e95db 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,13 @@ 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.17 -> ncpfs-0.18 + +- Another attempt at solving the problem that -n is not working. +- Forgot nprint in 0.17 util/Makefile. +- nprint left connections open when it fails +- added options -r and -t to ncpmount to tune ncpfs connections. + ncpfs-0.16 -> ncpfs-0.17 - Changed the name of fsinfo to nwfsinfo, to avoid a name clash with diff --git a/FAQ b/FAQ new file mode 100644 index 0000000..0cd53d4 --- /dev/null +++ b/FAQ @@ -0,0 +1,41 @@ +There is certainly not enough material to call this an FAQ, but some +questions reach me regularly. Probably the documenation is not clear +enough. + +------------------------------------------------------------------------------- + +Q: Does ncpfs support long file names, using the OS/2 namespace? + +No. Not yet. I still have to sort out how that really works. But it should +certainly be possible. + +------------------------------------------------------------------------------- + +Q: When I re-export ncpfs-mounted directories via nfs, I get messages like + 'pwd: cannot get current directory', and other strange things happen to + the nfs clients. What's wrong? + +When you want to export a directory via NFS, you have to do two things: + +- You have to invoke mountd and nfsd with the option --re-export. On my + computer, both are invoked at system startup from the file + /etc/rc.d/rc.inet2. + +- You can not export a complete NetWare server hierarchy with all volumes + under a single mount point. You have to mount a single server volume to + make it re-exportable. Invoke ncpmount with the option -V volume to do + this. + +------------------------------------------------------------------------------- + +Q: When I compile ncpfs, I get a message like the following: + +make[1]: Entering directory `/home/me/netware/ncpfs/kernel-1.2/src' +gcc -D__KERNEL__ -I. -Wall -Wstrict-prototypes -O2 -DMODULE -fomit-frame-pointer -I/home/me/netware/ncpfs/kernel-1.2 -DNCPFS_VERSION=\"0.17\" -c dir.c +dir.c:36: warning: `struct dirent' declared inside parameter list +dir.c:36: warning: its scope is only this definition or declaration, +... + +You try to compile the part of ncpfs that is meant for kernel 1.2.13 under +kernel 1.3.x. Please look at the Makefile and comment out the +corresponding lines. diff --git a/Makefile b/Makefile index f6c8a25..9a15b23 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux ncp-filesystem routines. # -VERSION = 0.17 +VERSION = 0.18 TOPDIR = $(shell pwd) BINDIR = /usr/local/bin diff --git a/README b/README index 8fd7d96..9b11d71 100644 --- a/README +++ b/README @@ -12,10 +12,9 @@ kernel resides in /usr/src/linux, because the file kernel-1.2/src/sock.c has to refer directly to it. If you use Kernel 1.3, please be sure that you use at least -1.3.54. ncpfs does NOT work with any earlier 1.3.x kernel, especially -not with 1.3.53, although this one has a fs/ncpfs/ subdirectory. +1.3.71. ncpfs does NOT work with any earlier 1.3.x kernel. -If you use Kernel 1.3.54 or later, you might have to recompile your +If you use Kernel 1.3.71 or later, you might have to recompile your kernel. With these kernels, the kernel part of ncpfs is already included in the main source tree. If you want to use ncpfs, you should say 'y' to 'make config' when you are asked for IPX, and again when it @@ -23,12 +22,23 @@ asks for ncpfs. After you have rebooted with the new kernel, 'cat /proc/filesystems' should show you a line saying that the kernel knows ncpfs. -With Kernel 1.3.54 or later you also have to modify the Makefile in the +With Kernel 1.3.71 or later you also have to modify the Makefile in the directory you found this README in. Please see the Makefile for the necessary modifications. Then typing 'make' should work with no problem. +HELP + +To get more help you can subscribe to the LinWare mailing list: +control addr: listserv@sh.cvut.cz +posting addr: linware@sh.cvut.cz + +In the meantime my mail volume has grown considerably, so the response +time might be better at the LinWare mailing list than at my personal +email address. + + USING NCPFS Please note that your IPX system has to be configured correctly. If @@ -93,3 +103,6 @@ You will not be able to access servers that require packet signatures. This seems to be one of Novell's bigger secrets :-(. Have fun with ncpfs! + +Volker +lendecke@namu01.gwdg.de diff --git a/ipxdump/ipxutil.c b/ipxdump/ipxutil.c index 7af985d..215e0d5 100644 --- a/ipxdump/ipxutil.c +++ b/ipxdump/ipxutil.c @@ -91,7 +91,7 @@ ipx_assign_node(IPXNode dest, IPXNode src) int ipx_node_equal(IPXNode n1, IPXNode n2) { - return memcmp(n1,n2,sizeof(n1))==0; + return memcmp(n1,n2,sizeof(IPXNode))==0; } int diff --git a/kernel-1.2/src/dir.c b/kernel-1.2/src/dir.c index 46ae470..8369ff8 100644 --- a/kernel-1.2/src/dir.c +++ b/kernel-1.2/src/dir.c @@ -430,8 +430,8 @@ ncp_read_volume_list(struct ncp_server *server, int fpos, int cache_size) info.volume_name, &(entry->i)) != 0) { - printk("ncpfs: could not lookup vol " - "%s\n", info.volume_name); + DPRINTK("ncpfs: could not lookup vol " + "%s\n", info.volume_name); continue; } @@ -722,7 +722,8 @@ ncp_find_dir_inode(struct inode *dir, const char *name) { if ( (result->dir->finfo.i.DosDirNum == dir_info->DosDirNum) && (result->dir->finfo.i.volNumber == dir_info->volNumber) - && (strcmp(result->finfo.i.entryName, name) == 0)) + && (strcmp(result->finfo.i.entryName, name) == 0) + && (result != &(server->root))) { return result; } diff --git a/kernel-1.2/src/sock.c b/kernel-1.2/src/sock.c index bb48a3d..e5faf13 100644 --- a/kernel-1.2/src/sock.c +++ b/kernel-1.2/src/sock.c @@ -401,9 +401,8 @@ do_ncp_rpc_call(struct ncp_server *server, int size) * a null buffer yet. */ sock->ops->recvfrom(sock, (void *)&reply, sizeof(reply), 1, 0, NULL, &addrlen); -#if 1 - printk("ncp_rpc_call: reply mismatch\n"); -#endif + + DPRINTK("ncp_rpc_call: reply mismatch\n"); goto re_select; } /* diff --git a/man/ncpmount.8 b/man/ncpmount.8 index 6c68d2c..6216af4 100644 --- a/man/ncpmount.8 +++ b/man/ncpmount.8 @@ -37,6 +37,12 @@ ncpmount \- mount all volumes of a specified Novell fileserver. .B -V .I volume ] [ +.B -t +.I time_out +] [ +.B -r +.I retry_count +] [ .B -v ] mount-point @@ -221,6 +227,36 @@ sometime in the future I will make it possible to mount all volumes on different mount points, using only one connection. .RE +.B -t +.I time_out +.RS 3 +With +.B -t +you can adjust the time ncpfs waits for the server to answer a request +it sent. Use the option to raise the timeout value when your ncpfs +connections seem to be unstable although your servers are well +up. This can happen when you have very busy servers, or servers that +are very far away. + +.I time_out +is specified in 1/100s, the current default value is 60. +.RE + +.B -r +.I retry_count +.RS 3 +As +.B -t, -r +can be used to tune the ncpfs connection to the server. With +retry_count you can specify how many times ncpfs will attempt to send +a packet to the server before it decides the connection is dead. The +current default value is 5. + +Currently ncpfs is not too clever when trying to find out that +connections are dead. If anybody knows how to do that correctly, as it +is done by commercial workstations, please tell me. +.RE + .B -v .RS 3 Print ncpfs version number diff --git a/ncpfs-0.17.lsm b/ncpfs-0.18.lsm similarity index 83% rename from ncpfs-0.17.lsm rename to ncpfs-0.18.lsm index 9928716..bf39745 100644 --- a/ncpfs-0.17.lsm +++ b/ncpfs-0.18.lsm @@ -1,7 +1,7 @@ Begin3 Title: ncpfs -Version: 0.17 -Entered-date: 29. February 1996 +Version: 0.18 +Entered-date: 09. 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 @@ -13,7 +13,7 @@ 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/ - ~81k ncpfs-0.17.tgz - ~ 1k ncpfs-0.17.lsm + ~83k ncpfs-0.18.tgz + ~ 1k ncpfs-0.18.lsm Copying-policy: GPL End diff --git a/util/Makefile b/util/Makefile index 6434b38..2e87f06 100644 --- a/util/Makefile +++ b/util/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux ncp-filesystem routines. # -USERUTILS = slist pqlist nwfsinfo pserver +USERUTILS = slist pqlist nwfsinfo pserver nprint UIDUTILS = ncpmount ncpumount SBINUTILS = nwmsg diff --git a/util/ncplib.c b/util/ncplib.c index b5124a1..e72e01b 100644 --- a/util/ncplib.c +++ b/util/ncplib.c @@ -1239,13 +1239,12 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password, } } - if (strlen(spec.user) == 0) { return &spec; } - if (strlen(spec.password) == 0) + if ((strlen(spec.password) == 0) && (password == NULL)) { char *password; if (!(isatty(0) && isatty(1))) @@ -2769,6 +2768,7 @@ ncp_copy_file(struct ncp_conn *conn, } *copied_count = ncp_reply_dword(conn, 0); + ncp_unlock_conn(conn); return 0; } diff --git a/util/ncpmount.c b/util/ncpmount.c index d7efae9..697cdb2 100644 --- a/util/ncpmount.c +++ b/util/ncpmount.c @@ -192,10 +192,13 @@ main(int argc, char *argv[]) data.file_mode = (S_IRWXU|S_IRWXG|S_IRWXO) & ~um; data.dir_mode = 0; data.flags |= NCP_MOUNT_SOFT; + data.time_out = 60; + data.retry_count = 5; upcase_password = 1; - while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nhvV:")) != EOF) + while ((opt = getopt (argc, argv, "CS:U:c:u:g:f:d:P:nhvV:t:r:")) + != EOF) { switch (opt) { @@ -296,6 +299,12 @@ main(int argc, char *argv[]) case 'n': password = ""; break; + case 't': + data.time_out = atoi(optarg); + break; + case 'r': + data.retry_count = atoi(optarg); + break; case 'h': help(); exit(1); @@ -463,9 +472,6 @@ main(int argc, char *argv[]) flags = MS_MGC_VAL; - data.time_out = 20; - data.retry_count = 2; - result = mount(NULL, mount_point, "ncpfs", flags, (char *)&data); if (result < 0) @@ -545,12 +551,16 @@ help(void) printf("\n" "-S server Server name to be used\n" "-U username Username sent to server\n" + "-V volume Volume to mount, for NFS re-export\n" "-u uid uid the mounted files get\n" "-g gid gid the mounted files get\n" "-f mode permission the files get (octal notation)\n" "-d mode permission the dirs get (octal notation)\n" "-c uid uid to identify the connection to mount on\n" " Only makes sense for root\n" + "-t time_out Waiting time (in 1/100s) to wait for\n" + " an answer from the server. Default: 60\n" + "-r retry_count Number of retry attempts. Default: 5\n" "-C Don't convert password to uppercase\n" "-P password Use this password\n" "-n Do not use any password\n" diff --git a/util/nprint.c b/util/nprint.c index e476be3..5a3d620 100644 --- a/util/nprint.c +++ b/util/nprint.c @@ -191,6 +191,7 @@ main(int argc, char *argv[]) { printf("queue name too long: %s\n", optarg); + ncp_close(&conn); exit(1); } queue = optarg; @@ -211,6 +212,7 @@ main(int argc, char *argv[]) default: usage(); + ncp_close(&conn); exit(1); } } @@ -218,6 +220,7 @@ main(int argc, char *argv[]) if (optind != argc-1) { usage(); + ncp_close(&conn); exit(1); } @@ -233,6 +236,7 @@ main(int argc, char *argv[]) if (file < 0) { perror("could not open file"); + ncp_close(&conn); exit(1); } @@ -268,13 +272,15 @@ main(int argc, char *argv[]) queue, &q) != 0) { printf("could not find queue %s\n", queue); - return; + ncp_close(&conn); + exit(1); } if (ncp_create_queue_job_and_file(&conn, q.object_id, &j) != 0) { printf("create error\n"); - return; + ncp_close(&conn); + exit(1); } written = 0; @@ -299,17 +305,18 @@ main(int argc, char *argv[]) if (ncp_close_file_and_start_job(&conn, q.object_id, &j) != 0) { printf("close error\n"); + ncp_close(&conn); return; - } + } ncp_close(&conn); + return; } static void usage(void) { fprintf(stderr, "usage: %s [options] file\n", progname); - exit(1); } static void