Fix rquotad. nfs-utils-0-1-3
authorhjl <hjl>
Mon, 29 Nov 1999 19:21:16 +0000 (19:21 +0000)
committerhjl <hjl>
Mon, 29 Nov 1999 19:21:16 +0000 (19:21 +0000)
ChangeLog
README
configure
configure.in
nfs-utils.spec
utils/rquotad/rquota_server.c

index ddf213c..0dc6f35 100644 (file)
--- 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 (file)
--- 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
index bf7546d..d0c6f0c 100755 (executable)
--- 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.
index 2293b64..231c233 100644 (file)
@@ -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 *************************************************************
index 4619e61..6ba9dd0 100644 (file)
@@ -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
index 08c4f8c..e9167ca 100644 (file)
 #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
 
 /*
  */
 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);