X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Frquotad%2Frquota_server.c;h=2832974c735c174097074319682342a5242f5dfb;hb=e7c106f6008ab11558e595585fb72872b21ae624;hp=e9167ca19692a3bbaf7f374614c74c53d894f654;hpb=23902fd9a92b121280d054d41b439f39a8ef3064;p=nfs-utils.git diff --git a/utils/rquotad/rquota_server.c b/utils/rquotad/rquota_server.c index e9167ca..2832974 100644 --- a/utils/rquotad/rquota_server.c +++ b/utils/rquotad/rquota_server.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,10 @@ #define MNTTYPE_AUTOFS "autofs" #endif +#ifndef BLOCK_SIZE +#define BLOCK_SIZE 1024 +#endif + /* * Global unix authentication credentials. */ @@ -70,7 +75,7 @@ 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; /* * First check authentication. @@ -105,23 +110,23 @@ 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 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 + /* All blocks reported are in BLOCK_SIZE. */ + result.getquota_rslt_u.gqr_rquota.rq_bsize = BLOCK_SIZE; if (hasquota(mnt, type, &qfpathname)) { if ((err = quotactl(QCMD(Q_GETQUOTA, type), mnt->mnt_fsname,