summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjkar8572 <jkar8572>2004-07-13 12:08:55 +0000
committerjkar8572 <jkar8572>2004-07-13 12:08:55 +0000
commit787ea6b6dfb6db7c0249269e349b723f0a6c3277 (patch)
tree5d9cd9cf6972255fe23c7f282be2c9edc9c4a1c4
parent24f185da120bf5083d450944e2ba4fc03ea568e0 (diff)
Fixed exit codes of edquota and setquota (Jan Kara)
-rw-r--r--Changelog1
-rw-r--r--edquota.c41
-rw-r--r--quotasys.c7
-rw-r--r--setquota.c39
4 files changed, 59 insertions, 29 deletions
diff --git a/Changelog b/Changelog
index 51808bb..178ae33 100644
--- a/Changelog
+++ b/Changelog
@@ -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
diff --git a/edquota.c b/edquota.c
index b7b993b..793981f 100644
--- a/edquota.c
+++ b/edquota.c
@@ -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;
}
diff --git a/quotasys.c b/quotasys.c
index 6ea5713..e6c857b 100644
--- a/quotasys.c
+++ b/quotasys.c
@@ -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;
}
/*
diff --git a/setquota.c b/setquota.c
index 957fb3c..d2dfccb 100644
--- a/setquota.c
+++ b/setquota.c
@@ -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;
}