diff options
-rw-r--r-- | rquota_client.c | 29 | ||||
-rw-r--r-- | rquota_server.c | 29 |
2 files changed, 48 insertions, 10 deletions
diff --git a/rquota_client.c b/rquota_client.c index 017dd2c..0d1d86b 100644 --- a/rquota_client.c +++ b/rquota_client.c @@ -9,7 +9,7 @@ * * This part does the rpc-communication with the rquotad. * - * Version: $Id: rquota_client.c,v 1.1 2001/03/23 12:03:27 jkar8572 Exp $ + * Version: $Id: rquota_client.c,v 1.2 2001/06/07 17:51:43 jkar8572 Exp $ * * Author: Marco van Wieringen <mvw@planets.elm.net> * @@ -30,6 +30,7 @@ #include <stdio.h> #include <string.h> #include <signal.h> +#include <time.h> #include "mntopt.h" #include "rquota.h" @@ -41,6 +42,8 @@ /* Convert network format of quotas to utils one */ static inline void clinet2utildqblk(struct util_dqblk *u, struct rquota *n) { + time_t now; + /* Copy the quota */ u->dqb_bhardlimit = n->rq_bhardlimit; u->dqb_bsoftlimit = n->rq_bsoftlimit; @@ -48,8 +51,15 @@ static inline void clinet2utildqblk(struct util_dqblk *u, struct rquota *n) u->dqb_isoftlimit = n->rq_fsoftlimit; u->dqb_curinodes = n->rq_curfiles; u->dqb_curspace = n->rq_curblocks * n->rq_bsize; - u->dqb_btime = n->rq_btimeleft; - u->dqb_itime = n->rq_ftimeleft; + time(&now); + if (n->rq_btimeleft) + u->dqb_btime = n->rq_btimeleft + now; + else + u->dqb_btime = 0; + if (n->rq_ftimeleft) + u->dqb_itime = n->rq_ftimeleft + now; + else + u->dqb_itime = 0; /* Convert from remote block size */ if (n->rq_bsize != RPC_DQBLK_SIZE) { int conversion_unit; @@ -71,14 +81,23 @@ static inline void clinet2utildqblk(struct util_dqblk *u, struct rquota *n) /* Convert utils format of quotas to network one */ static inline void cliutil2netdqblk(struct sq_dqblk *n, struct util_dqblk *u) { + time_t now; + + time(&now); n->rq_bhardlimit = u->dqb_bhardlimit; n->rq_bsoftlimit = u->dqb_bsoftlimit; n->rq_fhardlimit = u->dqb_ihardlimit; n->rq_fsoftlimit = u->dqb_isoftlimit; n->rq_curblocks = toqb(u->dqb_curspace); n->rq_curfiles = u->dqb_curinodes; - n->rq_btimeleft = u->dqb_btime; - n->rq_ftimeleft = u->dqb_itime; + if (u->dqb_btime) + n->rq_btimeleft = u->dqb_btime - now; + else + n->rq_btimeleft = 0; + if (u->dqb_itime) + n->rq_ftimeleft = u->dqb_itime - now; + else + n->rq_ftimeleft = 0; } /* diff --git a/rquota_server.c b/rquota_server.c index caa1327..a78cf20 100644 --- a/rquota_server.c +++ b/rquota_server.c @@ -9,7 +9,7 @@ * * This part does the lookup of the info. * - * Version: $Id: rquota_server.c,v 1.2 2001/05/02 09:32:22 jkar8572 Exp $ + * Version: $Id: rquota_server.c,v 1.3 2001/06/07 17:51:43 jkar8572 Exp $ * * Author: Marco van Wieringen <mvw@planets.elm.net> * @@ -26,6 +26,7 @@ #include <paths.h> #include <stdio.h> #include <syslog.h> +#include <time.h> #include <netdb.h> #ifdef HOST_ACCESS #include <tcpd.h> @@ -77,26 +78,44 @@ int in_group(gid_t * gids, u_int len, gid_t gid) static inline void servnet2utildqblk(struct util_dqblk *u, sq_dqblk * n) { + time_t now; + + time(&now); u->dqb_bhardlimit = n->rq_bhardlimit; u->dqb_bsoftlimit = n->rq_bsoftlimit; u->dqb_ihardlimit = n->rq_fhardlimit; u->dqb_isoftlimit = n->rq_fsoftlimit; u->dqb_curspace = n->rq_curblocks << RPC_DQBLK_SIZE_BITS; u->dqb_curinodes = n->rq_curfiles; - u->dqb_btime = n->rq_btimeleft; - u->dqb_itime = n->rq_ftimeleft; + if (n->rq_btimeleft) + u->dqb_btime = n->rq_btimeleft + now; + else + u->dqb_btime = 0; + if (n->rq_ftimeleft) + u->dqb_itime = n->rq_ftimeleft + now; + else + u->dqb_itime = 0; } static inline void servutil2netdqblk(struct rquota *n, struct util_dqblk *u) { + time_t now; + + time(&now); n->rq_bhardlimit = u->dqb_bhardlimit; n->rq_bsoftlimit = u->dqb_bsoftlimit; n->rq_fhardlimit = u->dqb_ihardlimit; n->rq_fsoftlimit = u->dqb_isoftlimit; n->rq_curblocks = (u->dqb_curspace + RPC_DQBLK_SIZE - 1) >> RPC_DQBLK_SIZE_BITS; n->rq_curfiles = u->dqb_curinodes; - n->rq_btimeleft = u->dqb_btime; - n->rq_ftimeleft = u->dqb_itime; + if (u->dqb_btime) + n->rq_btimeleft = u->dqb_btime - now; + else + n->rq_btimeleft = 0; + if (u->dqb_itime) + n->rq_ftimeleft = u->dqb_itime - now; + else + n->rq_ftimeleft = 0; } setquota_rslt *setquotainfo(int flags, caddr_t * argp, struct svc_req *rqstp) |