X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Frquotad%2Frquota_server.c;h=27a206ce333fbb2e820fc6377a568d687ab41e2b;hp=8494790b4ce88ef72437972e36e0e6a6134b5da2;hb=878fca79480f4e249329e1136edd720e94d112ca;hpb=abb2b251d60c5df9a7906a940b09e800d96e5081 diff --git a/utils/rquotad/rquota_server.c b/utils/rquotad/rquota_server.c index 8494790..27a206c 100644 --- a/utils/rquotad/rquota_server.c +++ b/utils/rquotad/rquota_server.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include @@ -42,6 +42,10 @@ #define MNTTYPE_AUTOFS "autofs" #endif +#ifndef BLOCK_SIZE +#define BLOCK_SIZE 1024 +#endif + /* * Global unix authentication credentials. */ @@ -72,7 +76,7 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp) char *pathname, *qfpathname; int fd, err, id, type; struct stat stm, stn; - struct statfs stf; + struct rquota *rquota; /* * First check authentication. @@ -122,11 +126,8 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp) || strcasecmp (mnt->mnt_type, MNTTYPE_IGNORE) == 0) break; - if (statfs(pathname, &stf) == -1) { - result.status = Q_EPERM; - return (&result); - } - result.getquota_rslt_u.gqr_rquota.rq_bsize = stf.f_bsize; + /* 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, @@ -166,10 +167,18 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp) result.getquota_rslt_u.gqr_rquota.rq_active = (err == 0) ? TRUE : FALSE; /* * Make a copy of the info into the last part of the remote quota - * struct which is exactly the same. + * struct might not be exactly the same on all architectures... */ - memcpy((caddr_t *)&result.getquota_rslt_u.gqr_rquota.rq_bhardlimit, - (caddr_t *)&dq_dqb, sizeof(struct dqblk)); + + rquota = &result.getquota_rslt_u.gqr_rquota; + rquota->rq_bhardlimit = dq_dqb.dqb_bhardlimit; + rquota->rq_bsoftlimit = dq_dqb.dqb_bsoftlimit;; + rquota->rq_curblocks = dq_dqb.dqb_curblocks; + rquota->rq_fhardlimit = dq_dqb.dqb_ihardlimit; + rquota->rq_fsoftlimit = dq_dqb.dqb_isoftlimit; + rquota->rq_curfiles = dq_dqb.dqb_curinodes; + rquota->rq_btimeleft = dq_dqb.dqb_btime; + rquota->rq_ftimeleft = dq_dqb.dqb_itime; return(&result); }