diff --git a/.downloads/ncpfs-0.23.tgz b/.downloads/ncpfs-0.23.tgz new file mode 100644 index 0000000..5a411e7 Binary files /dev/null and b/.downloads/ncpfs-0.23.tgz differ diff --git a/Changes b/Changes index 3088516..5ac2828 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 ftp.gwdg.de:/pub/linux/misc/ncpfs/old. +ncpfs-0.22 -> ncpfs-0.23 +- Fixed a memory allocation problem in nwmsg.c. Thanks to + Andrew Ross +- 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. diff --git a/FAQ b/FAQ index 5c7c4db..04f7776 100644 --- a/FAQ +++ b/FAQ @@ -4,6 +4,27 @@ enough. ------------------------------------------------------------------------------- +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? + +You probably used + +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 + +For use eth0, eth1 or whatever you network adapter is +called. The value for 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 diff --git a/Makefile b/Makefile index 1868f1e..6cfcaf3 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Makefile for the linux ncp-filesystem routines. # -VERSION = 0.22 +VERSION = 0.23 # If you are using kerneld to autoload ncp support, # uncomment this (kerneld is in linux since about 1.3.57): @@ -42,7 +42,7 @@ clean: mrproper: clean rm -fr $(INTERM_BINDIR)/* ncpfs.tgz make -C util mrproper - (cd ncpd; make clean) + (cd daemon; make clean) modules: ncpfs.o @@ -50,7 +50,13 @@ SRCPATH=$(shell pwd) SRCDIR=$(shell basename $(SRCPATH)) DISTFILE=$(SRCDIR).tgz -dist: tgz +dist: mrproper + mv daemon .. + (cd ..; \ + tar cvf - $(SRCDIR) | \ + gzip -9 > $(DISTFILE); \ + mv $(DISTFILE) $(SRCDIR)) + mv ../daemon . make dep make all diff --git a/ncpfs-0.22.lsm b/ncpfs-0.23.lsm similarity index 75% rename from ncpfs-0.22.lsm rename to ncpfs-0.23.lsm index 0cf7a46..8832381 100644 --- a/ncpfs-0.22.lsm +++ b/ncpfs-0.23.lsm @@ -1,7 +1,7 @@ Begin3 Title: ncpfs -Version: 0.22 -Entered-date: 17. April 1996 +Version: 0.23 +Entered-date: 04. May 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 @@ -12,8 +12,8 @@ Keywords: filesystem ncp novell netware printing Author: lendecke@namu01.gwdg.de (Volker Lendecke) Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke) Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs -Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ - ~120k ncpfs-0.22.tgz - ~ 1k ncpfs-0.22.lsm +Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ncpfs + ~120k ncpfs-0.23.tgz + ~ 1k ncpfs-0.23.lsm Copying-policy: GPL End diff --git a/util/ncplib.c b/util/ncplib.c index 6fe2982..f54794b 100644 --- a/util/ncplib.c +++ b/util/ncplib.c @@ -255,6 +255,10 @@ ipx_sap_find_nearest(int server_type, struct sockaddr_ipx *result, if(bind(sock,(struct sockaddr*)&addr,sizeof(addr))==-1) { + if (errno == EADDRNOTAVAIL) + { + errno = NCPL_ET_NO_INTERFACE; + } goto finished; } @@ -753,9 +757,10 @@ ncp_connect_any(struct ncp_conn *conn, int wdog_needed) char name[NCP_BINDERY_NAME_LEN]; long result; - if (ipx_sap_find_nearest(IPX_SAP_FILE_SERVER, &addr, name) != 0) + if ((result = ipx_sap_find_nearest(IPX_SAP_FILE_SERVER, + &addr, name)) != 0) { - return -1; + return result; } if ((result = ncp_connect_addr(conn, &addr, wdog_needed)) != 0) @@ -1310,7 +1315,7 @@ ncp_fopen_nwc(const char *user, const char *mode) struct ncp_conn_spec * ncp_find_conn_spec(const char *server, const char *user, const char *password, - uid_t uid, long *err) + int login_necessary, uid_t uid, long *err) { static struct ncp_conn_spec spec; @@ -1407,6 +1412,12 @@ ncp_find_conn_spec(const char *server, const char *user, const char *password, } } + if (login_necessary == 0) + { + memset(spec.user, 0, sizeof(spec.user)); + memset(spec.password, 0, sizeof(spec.password)); + } + if (strlen(spec.user) == 0) { return &spec; @@ -1524,7 +1535,8 @@ ncp_initialize_as(int *argc, char **argv, i += 1; } - spec = ncp_find_conn_spec(server, user, password, getuid(), err); + spec = ncp_find_conn_spec(server, user, password, login_necessary, + getuid(), err); if (spec == NULL) { diff --git a/util/ncplib.h b/util/ncplib.h index 51f81ce..2638b36 100644 --- a/util/ncplib.h +++ b/util/ncplib.h @@ -146,7 +146,7 @@ ncp_get_conn_ent(FILE *filep); struct ncp_conn_spec * ncp_find_conn_spec(const char *server, const char *user, const char *password, - uid_t uid, long *err); + int login_necessary, uid_t uid, long *err); long ncp_get_file_server_description_strings(struct ncp_conn *conn, diff --git a/util/ncplib_err.et b/util/ncplib_err.et index 66afe25..58905d3 100644 --- a/util/ncplib_err.et +++ b/util/ncplib_err.et @@ -24,4 +24,7 @@ ec NCPL_ET_INVALID_MODE, ec NCPL_ET_LOGIN_FAILED, "Login failed" +ec NCPL_ET_NO_INTERFACE, + "No primary IPX interface found" + end \ No newline at end of file diff --git a/util/ncpmount.c b/util/ncpmount.c index 89a5586..eafb928 100644 --- a/util/ncpmount.c +++ b/util/ncpmount.c @@ -10,7 +10,7 @@ * a conditional which leaves out the test and load code. * * Even if we _do_ want ncpmount to load the module, passing a - * fully-qualified pathname to insmod causes it to bypass a + * fully-qualified pathname to modprobe causes it to bypass a * path search. This may lead to ncpfs.o not being found on * some systems. */ @@ -102,7 +102,7 @@ load_ncpfs(void) else if (pid == 0) { /* child */ - execl("/sbin/insmod", "insmod", "ncpfs", NULL); + execl("/sbin/modprobe", "modprobe", "ncpfs", NULL); _exit(127); /* execl error */ } else @@ -321,7 +321,7 @@ main(int argc, char *argv[]) } } - if ((spec = ncp_find_conn_spec(server, user, password, data.uid, &err)) + if ((spec = ncp_find_conn_spec(server,user,password,1, data.uid, &err)) == NULL) { com_err(progname, err, "in find_conn_spec"); diff --git a/util/nwmsg.c b/util/nwmsg.c index 492272e..50c005c 100644 --- a/util/nwmsg.c +++ b/util/nwmsg.c @@ -32,6 +32,7 @@ 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]; @@ -53,7 +54,8 @@ main(int argc, char *argv[]) exit(1); } - if ((conn = ncp_open_mount(argv[1], &err)) == NULL) + mount_point = argv[1]; + if ((conn = ncp_open_mount(mount_point, &err)) == NULL) { com_err(progname, err, "in ncp_open_mount"); exit(1); @@ -104,7 +106,7 @@ main(int argc, char *argv[]) while ((mnt = getmntent(mtab)) != NULL) { - if (strcmp(mnt->mnt_dir, conn->mount_point) == 0) + if (strcmp(mnt->mnt_dir, mount_point) == 0) { break; }