summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjl <hjl>1999-11-29 19:21:16 +0000
committerhjl <hjl>1999-11-29 19:21:16 +0000
commit23902fd9a92b121280d054d41b439f39a8ef3064 (patch)
tree2b00947931451f830b9f2166a483ab7594d132f9
parent0ea2dc8b74c1c54c680a7b5a83da2dbe27e88d37 (diff)
downloadnfs-utils-23902fd9a92b121280d054d41b439f39a8ef3064.tar.gz
nfs-utils-23902fd9a92b121280d054d41b439f39a8ef3064.tar.xz
nfs-utils-23902fd9a92b121280d054d41b439f39a8ef3064.zip
Fix rquotad.
-rw-r--r--ChangeLog16
-rw-r--r--README16
-rwxr-xr-xconfigure2
-rw-r--r--configure.in2
-rw-r--r--nfs-utils.spec2
-rw-r--r--utils/rquotad/rquota_server.c96
6 files changed, 50 insertions, 84 deletions
diff --git a/ChangeLog b/ChangeLog
index ddf213c..0dc6f35 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+Mon Nov 29 11:17:35 1999 H.J. Lu <hjl@lucon.org>
+
+ * nfs-utils.spec (Version): Set to 0.1.3.
+
+ * configure.in (VERSION): Set to "nfs-utils 0.1.3".
+ * configure: Regenerated.
+
+ * README: Updated.
+
+Mon Nov 29 11:15:47 1999 H.J. Lu <hjl@lucon.org>
+
+ * utils/rquotad/rquota_server.c (nfsmount_to_devname): Removed.
+ (_PATH_DEV_DSK): Likewise.
+ (getquotainfo): Match the mounting point from /etc/mtab
+ instead of calling nfsmount_to_devname ().
+
1999-11-24 Chip Salzenberg <chip@valinux.com>
* utils/statd/monitor.c (sm_mon_1_svc): Accept lockd callbacks
diff --git a/README b/README
index 55079ca..9dac65e 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
-This is the Linux NFS utility package version 0.1.2. It is based on
+This is the Linux NFS utility package version 0.1.3. It is based on
knfsd 1.4.7.
-WARNING: The NFS servers in Linux 2.2 to 2.2.12 are not compatible with
+WARNING: The NFS servers in Linux 2.2 to 2.2.13 are not compatible with
other NFS client implemenations. If you plan to use Linux 2.2.x as an
NFS server for non-Linux NFS clients, you should get the Linux NFS
kernel from the Linux NFS CVS server:
@@ -42,8 +42,8 @@ contribute to the Linux NFS project, please go to
http://www.linuxnfs.sourceforge.org
-and login as "beta" with password "beta4u". You register yourself.
-Please send an email to nfs-admin@linuxnfs.sourceforge.org with
+You register yourself. Please send an email to
+nfs-admin@linuxnfs.sourceforge.org with
1. Your user id on www.linuxnfs.sourceforge.org.
2. The area in NFS you'd like to work on.
@@ -65,8 +65,8 @@ will get the latest version.
The files are
-ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.2.tar.gz
-ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.1-0.1.2.diff.gz
+ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.3.tar.gz
+ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.2-0.1.3.diff.gz
To compile, just do
@@ -81,7 +81,7 @@ They are tested on RedHat 6.1.
On RedHat 6.1, you can use
-# rpm -ta nfs-utils-0.1.2.tar.gz
+# rpm -ta nfs-utils-0.1.3.tar.gz
to build the source and binary RPMs.
@@ -95,4 +95,4 @@ Thanks.
H.J.
hjl@lucon.org
-10/25/99
+11/29/99
diff --git a/configure b/configure
index bf7546d..d0c6f0c 100755
--- a/configure
+++ b/configure
@@ -544,7 +544,7 @@ fi
# The nfs-utils version
-VERSION="nfs-utils 0.1.2"
+VERSION="nfs-utils 0.1.3"
# Check whether --with-statedir or --without-statedir was given.
diff --git a/configure.in b/configure.in
index 2293b64..231c233 100644
--- a/configure.in
+++ b/configure.in
@@ -4,7 +4,7 @@ AC_INIT(rules.mk)
AC_PREFIX_DEFAULT(/usr)
# The nfs-utils version
-VERSION="nfs-utils 0.1.2"
+VERSION="nfs-utils 0.1.3"
AC_SUBST(VERSION)
dnl *************************************************************
diff --git a/nfs-utils.spec b/nfs-utils.spec
index 4619e61..6ba9dd0 100644
--- a/nfs-utils.spec
+++ b/nfs-utils.spec
@@ -1,6 +1,6 @@
Summary: The utilities for Linux NFS client and server.
Name: nfs-utils
-Version: 0.1.2
+Version: 0.1.3
Release: 1
Source0: ftp://ftp.valinux.com/pub/support/hjl/nfs/%{name}-%{version}.tar.gz
Group: System Environment/Daemons
diff --git a/utils/rquotad/rquota_server.c b/utils/rquotad/rquota_server.c
index 08c4f8c..e9167ca 100644
--- a/utils/rquotad/rquota_server.c
+++ b/utils/rquotad/rquota_server.c
@@ -37,10 +37,8 @@
#define TYPE_EXTENDED 0x01
#define ACTIVE 0x02
-#ifdef ELM
-#define _PATH_DEV_DSK "/dev/dsk/"
-#else
-#define _PATH_DEV_DSK "/dev/"
+#ifndef MNTTYPE_AUTOFS
+#define MNTTYPE_AUTOFS "autofs"
#endif
/*
@@ -48,62 +46,6 @@
*/
extern struct authunix_parms *unix_cred;
-char *nfsmount_to_devname(char *pathname, int *blksize)
-{
- DIR *dp;
- dev_t device;
- struct stat st;
- struct dirent *de;
- static char *devicename = NULL;
- static int devicelen = 0;
-
- if (stat(pathname, &st) == -1)
- return (char *)0;
-
- device = st.st_dev;
- *blksize = st.st_blksize;
-
- /*
- * search for devicename in _PATH_DEV_DSK dir.
- */
- if ((dp = opendir(_PATH_DEV_DSK)) == (DIR *)0)
- return (char *)0;
-
- while ((de = readdir(dp)) != (struct dirent *)0) {
- if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
- continue;
-
- if (devicelen == 0) {
- devicelen = sizeof (_PATH_DEV_DSK) + strlen (de->d_name) + 1;
- devicename = (char *) xmalloc (devicelen);
- }
- else {
- int newlen = sizeof (_PATH_DEV_DSK) + strlen (de->d_name) + 1;
- if (newlen > devicelen) {
- devicelen = newlen;
- devicename = (char *) xrealloc (devicename, devicelen);
- }
- }
-
- strcpy(devicename, _PATH_DEV_DSK);
- strcat(devicename, de->d_name);
- if (stat(devicename, &st) == -1)
- continue;
-
- if (!S_ISBLK(st.st_mode))
- continue;
-
- if ((device == st.st_rdev) && S_ISBLK(st.st_mode))
- break;
- }
- closedir(dp);
-
- if (de != (struct dirent *)0) {
- return devicename;
- } else
- return (char *)0;
-}
-
int in_group (gid_t *gids, u_int len, gid_t gid)
{
int cnt = 0;
@@ -126,8 +68,9 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp)
FILE *fp;
struct dqblk dq_dqb;
struct mntent *mnt;
- char *pathname, *devicename, *qfpathname;
+ char *pathname, *qfpathname;
int fd, err, id, type;
+ struct stat st;
/*
* First check authentication.
@@ -160,23 +103,30 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp)
}
}
- /*
- * Convert a nfs_mountpoint to a local devicename.
- */
- if ((devicename = nfsmount_to_devname(pathname,
- &result.getquota_rslt_u.gqr_rquota.rq_bsize)) == (char *)0) {
- result.status = Q_NOQUOTA;
- return(&result);
- }
-
fp = setmntent(MNTTAB, "r");
while ((mnt = getmntent(fp)) != (struct mntent *)0) {
- if (strcmp(devicename, mnt->mnt_fsname))
+ if (strcasecmp (mnt->mnt_dir, pathname))
continue;
+ if (mnt->mnt_fsname [0] != '/'
+ || strcasecmp (mnt->mnt_type, MNTTYPE_NFS) == 0
+ || strcasecmp (mnt->mnt_type, MNTTYPE_AUTOFS) == 0
+ || strcasecmp (mnt->mnt_type, MNTTYPE_SWAP) == 0
+ || strcasecmp (mnt->mnt_type, MNTTYPE_IGNORE) == 0
+ || stat(pathname, &st) == -1)
+ break;
+
+#if 0
+ result.getquota_rslt_u.gqr_rquota.rq_bsize = st.st_blksize;
+#else
+ /* All blocks reported are 512 Bytes blocks. */
+ result.getquota_rslt_u.gqr_rquota.rq_bsize = 512;
+#endif
+
if (hasquota(mnt, type, &qfpathname)) {
- if ((err = quotactl(QCMD(Q_GETQUOTA, type), devicename, id,
- (caddr_t)&dq_dqb)) == -1 && !(flags & ACTIVE)) {
+ if ((err = quotactl(QCMD(Q_GETQUOTA, type), mnt->mnt_fsname,
+ id, (caddr_t)&dq_dqb)) == -1
+ && !(flags & ACTIVE)) {
if ((fd = open(qfpathname, O_RDONLY)) < 0)
{
free(qfpathname);