Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7d0e3d011b |
BIN
.downloads/ncpfs-0.24.tgz
Normal file
BIN
.downloads/ncpfs-0.24.tgz
Normal file
Binary file not shown.
6
Changes
6
Changes
@@ -1,6 +1,12 @@
|
|||||||
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 ftp.gwdg.de:/pub/linux/misc/ncpfs/old.
|
versions, you can find them on ftp.gwdg.de:/pub/linux/misc/ncpfs/old.
|
||||||
|
|
||||||
|
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
|
ncpfs-0.22 -> ncpfs-0.23
|
||||||
- Fixed a memory allocation problem in nwmsg.c. Thanks to
|
- Fixed a memory allocation problem in nwmsg.c. Thanks to
|
||||||
Andrew Ross <anr1001@hermes.cam.ac.uk>
|
Andrew Ross <anr1001@hermes.cam.ac.uk>
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -2,7 +2,7 @@
|
|||||||
# Makefile for the linux ncp-filesystem routines.
|
# Makefile for the linux ncp-filesystem routines.
|
||||||
#
|
#
|
||||||
|
|
||||||
VERSION = 0.23
|
VERSION = 0.24
|
||||||
|
|
||||||
# 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):
|
||||||
|
|||||||
8
README
8
README
@@ -5,6 +5,14 @@ provided.
|
|||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -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 {
|
||||||
@@ -827,7 +828,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)
|
||||||
@@ -841,6 +842,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)
|
||||||
@@ -903,6 +905,7 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
}
|
}
|
||||||
if (res != 0)
|
if (res != 0)
|
||||||
{
|
{
|
||||||
|
unlock_super(dir->i_sb);
|
||||||
iput(dir);
|
iput(dir);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
@@ -913,10 +916,12 @@ ncp_lookup(struct inode *dir, const char *__name, int len,
|
|||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
@@ -946,6 +951,7 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
_name[len] = '\0';
|
_name[len] = '\0';
|
||||||
str_upper(_name);
|
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|
|
||||||
@@ -953,6 +959,7 @@ 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;
|
||||||
}
|
}
|
||||||
@@ -965,10 +972,12 @@ ncp_create(struct inode *dir, const char *name, int len, int mode,
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@@ -985,6 +994,7 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 *
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Begin3
|
Begin3
|
||||||
Title: ncpfs
|
Title: ncpfs
|
||||||
Version: 0.23
|
Version: 0.24
|
||||||
Entered-date: 04. May 1996
|
Entered-date: 02. June 1996
|
||||||
Description: With ncpfs you can mount volumes of your netware
|
Description: With ncpfs you can mount volumes of your netware
|
||||||
server under Linux. You can also print to netware
|
server under Linux. You can also print to netware
|
||||||
print queues and spool netware print queues to the
|
print queues and spool netware print queues to the
|
||||||
@@ -9,11 +9,11 @@ Description: With ncpfs you can mount volumes of your netware
|
|||||||
1.3.71 and above. ncpfs does NOT work with any 1.3.x
|
1.3.71 and above. ncpfs does NOT work with any 1.3.x
|
||||||
kernel below 1.3.71.
|
kernel below 1.3.71.
|
||||||
Keywords: filesystem ncp novell netware printing
|
Keywords: filesystem ncp novell netware printing
|
||||||
Author: lendecke@namu01.gwdg.de (Volker Lendecke)
|
Author: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
Maintained-by: lendecke@namu01.gwdg.de (Volker Lendecke)
|
Maintained-by: lendecke@namu01.Num.Math.Uni-Goettingen.de (Volker Lendecke)
|
||||||
Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs
|
Primary-site: ftp.gwdg.de:/pub/linux/misc/ncpfs
|
||||||
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ncpfs
|
Alternate-site: sunsite.unc.edu:/pub/system/Filesystems/ncpfs
|
||||||
~120k ncpfs-0.23.tgz
|
~120k ncpfs-0.24.tgz
|
||||||
~ 1k ncpfs-0.23.lsm
|
~ 1k ncpfs-0.24.lsm
|
||||||
Copying-policy: GPL
|
Copying-policy: GPL
|
||||||
End
|
End
|
||||||
@@ -520,7 +520,7 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
|||||||
*((struct ncp_request_header *)(&(conn->packet)));
|
*((struct ncp_request_header *)(&(conn->packet)));
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
int retries = 3;
|
int retries = 20;
|
||||||
int len;
|
int len;
|
||||||
long err;
|
long err;
|
||||||
struct ncp_reply_header *r =
|
struct ncp_reply_header *r =
|
||||||
@@ -542,7 +542,7 @@ do_ncp_call(struct ncp_conn *conn, int request_size)
|
|||||||
|
|
||||||
re_select:
|
re_select:
|
||||||
len = ipx_recv(conn->ncp_sock,
|
len = ipx_recv(conn->ncp_sock,
|
||||||
conn->packet, NCP_PACKET_SIZE, 0, 1, &err);
|
conn->packet, NCP_PACKET_SIZE, 0, 3, &err);
|
||||||
|
|
||||||
if ( (len == sizeof(*r))
|
if ( (len == sizeof(*r))
|
||||||
&& (r->type == NCP_POSITIVE_ACK))
|
&& (r->type == NCP_POSITIVE_ACK))
|
||||||
|
|||||||
@@ -21,10 +21,16 @@ ec NCPL_ET_NO_SPEC,
|
|||||||
ec NCPL_ET_INVALID_MODE,
|
ec NCPL_ET_INVALID_MODE,
|
||||||
"$HOME/.nwclient has invalid mode"
|
"$HOME/.nwclient has invalid mode"
|
||||||
|
|
||||||
ec NCPL_ET_LOGIN_FAILED,
|
ec NCPL_ET_LOGIN_DENIED,
|
||||||
"Login failed"
|
"Login denied"
|
||||||
|
|
||||||
ec NCPL_ET_NO_INTERFACE,
|
ec NCPL_ET_NO_INTERFACE,
|
||||||
"No primary IPX interface found"
|
"No primary IPX interface found"
|
||||||
|
|
||||||
|
ec NCPL_ET_NO_PASSWORD,
|
||||||
|
"Could not get password"
|
||||||
|
|
||||||
|
ec NCPL_ET_PWD_TOO_LONG,
|
||||||
|
"Password too long"
|
||||||
|
|
||||||
end
|
end
|
||||||
Reference in New Issue
Block a user