X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Frquotad%2Frquota_server.c;h=8494790b4ce88ef72437972e36e0e6a6134b5da2;hp=bef99c7d503622fd2a75d94edb167e1f3c95875f;hb=abb2b251d60c5df9a7906a940b09e800d96e5081;hpb=d6a3885164e3c58e355feb4a7b94176ae127343d diff --git a/utils/rquotad/rquota_server.c b/utils/rquotad/rquota_server.c index bef99c7..8494790 100644 --- a/utils/rquotad/rquota_server.c +++ b/utils/rquotad/rquota_server.c @@ -71,9 +71,9 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp) struct mntent *mnt; char *pathname, *qfpathname; int fd, err, id, type; - struct stat st; + struct stat stm, stn; struct statfs stf; - + /* * First check authentication. */ @@ -107,15 +107,19 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp) fp = setmntent(MNTTAB, "r"); while ((mnt = getmntent(fp)) != (struct mntent *)0) { - if (strcasecmp (mnt->mnt_dir, pathname)) - continue; + if (stat(mnt->mnt_dir, &stm) == -1) + continue; + + if (stat(pathname, &stn) == -1) + break; + else if (stm.st_dev != stn.st_dev) + 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) + || strcasecmp (mnt->mnt_type, MNTTYPE_IGNORE) == 0) break; if (statfs(pathname, &stf) == -1) {