From 23902fd9a92b121280d054d41b439f39a8ef3064 Mon Sep 17 00:00:00 2001 From: hjl Date: Mon, 29 Nov 1999 19:21:16 +0000 Subject: [PATCH] Fix rquotad. --- ChangeLog | 16 ++++++ README | 16 +++--- configure | 2 +- configure.in | 2 +- nfs-utils.spec | 2 +- utils/rquotad/rquota_server.c | 96 +++++++++-------------------------- 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 + + * 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 + + * 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 * 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); -- 2.39.5