diff options
author | jkar8572 <jkar8572> | 2004-07-13 12:08:55 +0000 |
---|---|---|
committer | jkar8572 <jkar8572> | 2004-07-13 12:08:55 +0000 |
commit | 787ea6b6dfb6db7c0249269e349b723f0a6c3277 (patch) | |
tree | 5d9cd9cf6972255fe23c7f282be2c9edc9c4a1c4 | |
parent | 24f185da120bf5083d450944e2ba4fc03ea568e0 (diff) |
Fixed exit codes of edquota and setquota (Jan Kara)
-rw-r--r-- | Changelog | 1 | ||||
-rw-r--r-- | edquota.c | 41 | ||||
-rw-r--r-- | quotasys.c | 7 | ||||
-rw-r--r-- | setquota.c | 39 |
4 files changed, 59 insertions, 29 deletions
@@ -1,4 +1,5 @@ Changes in quota-tools from 3.12 to 3.13 +* fixed exit codes of setquota(8) and edquota(8) (Jan Kara) * updated Polish translations (Jakub Bogusz) Changes in quota-tools from 3.11 to 3.12 @@ -34,7 +34,7 @@ #ident "$Copyright: (c) 1980, 1990 Regents of the University of California. $" #ident "$Copyright: All rights reserved. $" -#ident "$Id: edquota.c,v 1.14 2004/04/14 16:03:14 jkar8572 Exp $" +#ident "$Id: edquota.c,v 1.15 2004/07/13 12:08:55 jkar8572 Exp $" /* * Disk quota editor. @@ -155,6 +155,7 @@ int main(int argc, char **argv) return 0; } if (pflag) { + ret = 0; protoid = name2id(protoname, quotatype, NULL); protoprivs = getprivs(protoid, handles, 0); while (argc-- > 0) { @@ -177,12 +178,14 @@ int main(int argc, char **argv) update_grace_times(cprivs); } } - putprivs(curprivs, COMMIT_LIMITS); + if (putprivs(curprivs, COMMIT_LIMITS) == -1) + ret = -1; freeprivs(curprivs); } - dispose_handle_list(handles); + if (dispose_handle_list(handles) == -1) + ret = -1; freeprivs(protoprivs); - exit(0); + exit(ret ? 1 : 0); } umask(077); @@ -195,18 +198,19 @@ int main(int argc, char **argv) strcat(tmpfil, "/EdP.aXXXXXX"); tmpfd = mkstemp(tmpfil); fchown(tmpfd, getuid(), getgid()); + ret = 0; if (tflag) { if (writetimes(handles, tmpfd) < 0) { - unlink(tmpfil); - die(1, _("Can't write grace times to file.\n")); + errstr(_("Can't write grace times to file.\n")); + ret = -1; } if (editprivs(tmpfil) < 0) { - unlink(tmpfil); - die(1, _("Error while editting grace times.\n")); + errstr(_("Error while editting grace times.\n")); + ret = -1; } if (readtimes(handles, tmpfd) < 0) { - unlink(tmpfil); - die(1, _("Failed to parse grace times file.\n")); + errstr(_("Failed to parse grace times file.\n")); + ret = -1; } } else if (Tflag) { @@ -215,17 +219,21 @@ int main(int argc, char **argv) curprivs = getprivs(id, handles, 0); if (writeindividualtimes(curprivs, tmpfd, *argv, quotatype) < 0) { errstr(_("Can't write individual grace times to file.\n")); + ret = -1; continue; } if (editprivs(tmpfil) < 0) { errstr(_("Error while editting individual grace times.\n")); + ret = -1; continue; } if (readindividualtimes(curprivs, tmpfd) < 0) { errstr(_("Can't read individual grace times from file.\n")); + ret = -1; continue; } - putprivs(curprivs, COMMIT_TIMES); + if (putprivs(curprivs, COMMIT_TIMES) == -1) + ret = -1; freeprivs(curprivs); } } @@ -235,10 +243,12 @@ int main(int argc, char **argv) curprivs = getprivs(id, handles, 0); if (writeprivs(curprivs, tmpfd, *argv, quotatype) < 0) { errstr(_("Can't write quotas to file.\n")); + ret = -1; continue; } if (editprivs(tmpfil) < 0) { errstr(_("Error while editting quotas.\n")); + ret = -1; continue; } close(tmpfd); @@ -246,16 +256,19 @@ int main(int argc, char **argv) die(1, _("Can't reopen!")); if (readprivs(curprivs, tmpfd) < 0) { errstr(_("Can't read quotas from file.\n")); + ret = -1; continue; } - putprivs(curprivs, COMMIT_LIMITS); + if (putprivs(curprivs, COMMIT_LIMITS) == -1) + ret = -1; freeprivs(curprivs); } } - dispose_handle_list(handles); + if (dispose_handle_list(handles) == -1) + ret = -1; close(tmpfd); unlink(tmpfil); free(tmpfil); - return 0; + return ret ? 1 : 0; } @@ -585,12 +585,15 @@ struct quota_handle **create_handle_list(int count, char **mntpoints, int type, int dispose_handle_list(struct quota_handle **hlist) { int i; + int ret = 0; for (i = 0; hlist[i]; i++) - if (end_io(hlist[i]) < 0) + if (end_io(hlist[i]) < 0) { errstr(_("Error while releasing file on %s\n"), hlist[i]->qh_quotadev); - return 0; + ret = -1; + } + return ret; } /* @@ -215,9 +215,10 @@ static void parse_options(int argcnt, char **argstr) } /* Set user limits */ -static void setlimits(struct quota_handle **handles) +static int setlimits(struct quota_handle **handles) { struct dquot *q, *protoq, *protoprivs = NULL, *curprivs; + int ret = 0; curprivs = getprivs(id, handles, 0); if (flags & FL_PROTO) { @@ -240,8 +241,10 @@ static void setlimits(struct quota_handle **handles) update_grace_times(q); } } - putprivs(curprivs, COMMIT_LIMITS); + if (putprivs(curprivs, COMMIT_LIMITS) == -1) + ret = -1; freeprivs(curprivs); + return ret; } #define MAXLINELEN (MAXNUMLEN*4+MAXNAMELEN+16) @@ -274,11 +277,12 @@ static int read_entry(qid_t *id, qsize_t *isoftlimit, qsize_t *ihardlimit, qsize } /* Set user limits in batch mode */ -static void batch_setlimits(struct quota_handle **handles) +static int batch_setlimits(struct quota_handle **handles) { struct dquot *curprivs, *q; qsize_t bhardlimit, bsoftlimit, ihardlimit, isoftlimit; qid_t id; + int ret = 0; while (!read_entry(&id, &isoftlimit, &ihardlimit, &bsoftlimit, &bhardlimit)) { curprivs = getprivs(id, handles, 0); @@ -289,13 +293,15 @@ static void batch_setlimits(struct quota_handle **handles) q->dq_dqb.dqb_ihardlimit = ihardlimit; update_grace_times(q); } - putprivs(curprivs, COMMIT_LIMITS); + if (putprivs(curprivs, COMMIT_LIMITS) == -1) + ret = -1; freeprivs(curprivs); } + return ret; } /* Set grace times */ -static void setgraces(struct quota_handle **handles) +static int setgraces(struct quota_handle **handles) { int i; @@ -304,11 +310,13 @@ static void setgraces(struct quota_handle **handles) handles[i]->qh_info.dqi_igrace = toset.dqb_itime; mark_quotafile_info_dirty(handles[i]); } + return 0; } /* Set grace times for individual user */ -static void setindivgraces(struct quota_handle **handles) +static int setindivgraces(struct quota_handle **handles) { + int ret = 0; struct dquot *q, *curprivs; curprivs = getprivs(id, handles, 0); @@ -316,14 +324,18 @@ static void setindivgraces(struct quota_handle **handles) q->dq_dqb.dqb_btime = toset.dqb_btime; q->dq_dqb.dqb_itime = toset.dqb_itime; } - if (putprivs(curprivs, COMMIT_TIMES) == -1) + if (putprivs(curprivs, COMMIT_TIMES) == -1) { errstr(_("Can't write times for %s. Maybe kernel doesn't support such operation?\n"), type2name(flags & FL_USER ? USRQUOTA : GRPQUOTA)); + ret = -1; + } freeprivs(curprivs); + return ret; } int main(int argc, char **argv) { struct quota_handle **handles; + int ret; gettexton(); progname = basename(argv[0]); @@ -337,15 +349,16 @@ int main(int argc, char **argv) handles = create_handle_list(mntcnt, mnt, flag2type(flags), fmt, (flags & FL_RPC) ? 0 : IOI_LOCALONLY, 0); if (flags & FL_GRACE) - setgraces(handles); + ret = setgraces(handles); else if (flags & FL_INDIVIDUAL_GRACE) - setindivgraces(handles); + ret = setindivgraces(handles); else if (flags & FL_BATCH) - batch_setlimits(handles); + ret = batch_setlimits(handles); else - setlimits(handles); + ret = setlimits(handles); - dispose_handle_list(handles); + if (dispose_handle_list(handles) == -1) + ret = -1; - return 0; + return ret ? 1 : 0; } |