summaryrefslogtreecommitdiff
path: root/quotaon.c
diff options
context:
space:
mode:
authorjkar8572 <jkar8572>2001-05-02 09:32:22 +0000
committerjkar8572 <jkar8572>2001-05-02 09:32:22 +0000
commit84ec12aa207cb8d5323b63847bfd8115881f2886 (patch)
tree9533951fedda68167081028741a9ec3fd8ad547b /quotaon.c
parent9c4a512419c660c0513db48e038169167e3e7d25 (diff)
Added mntopt.h to dependencies in Makefile.in.
Fixed MNTTYPE_REISER to proper string. sprintf->snprintf Merged Marco's patch with errstr(), configurable BSD behaviour Fixed bug in quota detection IO code now opens file only RO if possible. IO code now doesn't open file if not required. Fixed bug in quotaon. Updated all manpages.
Diffstat (limited to 'quotaon.c')
-rw-r--r--quotaon.c55
1 files changed, 29 insertions, 26 deletions
diff --git a/quotaon.c b/quotaon.c
index e6545d4..326ed51 100644
--- a/quotaon.c
+++ b/quotaon.c
@@ -34,12 +34,13 @@
#ident "$Copyright: (c) 1980, 1990 Regents of the University of California $"
#ident "$Copyright: All rights reserved. $"
-#ident "$Id: quotaon.c,v 1.3 2001/04/26 09:36:08 jkar8572 Exp $"
+#ident "$Id: quotaon.c,v 1.4 2001/05/02 09:32:22 jkar8572 Exp $"
/*
* Turn quota on/off for a filesystem.
*/
#include <stdio.h>
+#include <errno.h>
#include <getopt.h>
#include <string.h>
#include <stdlib.h>
@@ -51,11 +52,12 @@ int gflag; /* operate on group quotas */
int uflag; /* operate on user quotas */
int vflag; /* verbose */
int kqf; /* kernel quota format */
+char *progname;
-static void usage(char *whoami)
+static void usage(void)
{
- fprintf(stderr, _("Usage:\n\t%s [-guv] [-x state] -a\n"), whoami);
- fprintf(stderr, _("\t%s [-guv] [-x state] filesys ...\n"), whoami);
+ errstr(_("Usage:\n\t%s [-guv] [-x state] -a\n"));
+ errstr(_("\t%s [-guv] [-x state] filesys ...\n"));
exit(1);
}
@@ -99,8 +101,8 @@ static int newstate(struct mntent *mnt, int offmode, int type, char *extra)
|| (!offmode && kern_quota_on(mnt_fsname, type, 1 << QF_XFS))))
ret = xfs_newstate(mnt, type, extra, flags);
else {
- extra = get_qf_name(mnt, type, kqf);
- statefunc = (kqf & (1 << QF_VFSV0)) ? v1_newstate : v2_newstate;
+ extra = get_qf_name(mnt, type, (kqf & (1 << QF_VFSV0)) ? QF_VFSV0 : QF_VFSOLD);
+ statefunc = (kqf & (1 << QF_VFSV0)) ? v2_newstate : v1_newstate;
ret = statefunc(mnt, type, extra, flags);
free(extra);
}
@@ -112,16 +114,16 @@ int main(int argc, char **argv)
FILE *fp;
struct mntent *mnt;
long argnum, done = 0;
- char *whoami, *xarg = NULL;
+ char *xarg = NULL;
int c, offmode = 0, errs = 0;
gettexton();
- whoami = basename(argv[0]);
- if (strcmp(whoami, "quotaoff") == 0)
+ progname = basename(argv[0]);
+ if (strcmp(progname, "quotaoff") == 0)
offmode++;
- else if (strcmp(whoami, "quotaon") != 0)
- die(1, _("Name must be quotaon or quotaoff not %s\n"), whoami);
+ else if (strcmp(progname, "quotaon") != 0)
+ die(1, _("Name must be quotaon or quotaoff not %s\n"), progname);
while ((c = getopt(argc, argv, "afvugx:V")) != -1) {
switch (c) {
@@ -147,14 +149,14 @@ int main(int argc, char **argv)
version();
exit(0);
default:
- usage(whoami);
+ usage();
}
}
argc -= optind;
argv += optind;
if (argc <= 0 && !aflag)
- usage(whoami);
+ usage();
if (!gflag && !uflag) {
gflag++;
uflag++;
@@ -165,7 +167,7 @@ int main(int argc, char **argv)
fp = setmntent(MNTTAB, "r");
while ((mnt = getmntent(fp))) {
if (aflag) {
- if (hasmntopt(mnt, MNTOPT_NOAUTO))
+ if (hasmntopt(mnt, MNTOPT_NOAUTO) || !strcmp(mnt->mnt_type, MNTTYPE_NFS))
continue;
}
else {
@@ -174,6 +176,10 @@ int main(int argc, char **argv)
else
continue;
}
+ if (!strcmp(mnt->mnt_type, MNTTYPE_NFS)) {
+ fprintf(stderr, "%s: Quota can't be turned on on NFS filesystem\n", mnt->mnt_fsname);
+ continue;
+ }
if (gflag)
errs += newstate(mnt, offmode, GRPQUOTA, xarg);
@@ -184,7 +190,7 @@ int main(int argc, char **argv)
for (c = 0; c < argc; c++)
if ((done & (1 << c)) == 0)
- fprintf(stderr, _("%s not found in fstab\n"), argv[c]);
+ errstr(_("%s not found in fstab\n"), argv[c]);
return errs;
}
@@ -197,9 +203,8 @@ static int quotaonoff(char *quotadev, char *quotafile, int type, int flags)
if (flags & STATEFLAG_OFF) {
qcmd = QCMD(Q_QUOTAOFF, type);
- if (quotactl(qcmd, quotadev, 0, (void *)0) < 0) {
- fprintf(stderr, "quotaoff: ");
- perror(quotadev);
+ if (quotactl(qcmd, quotadev, 0, NULL) < 0) {
+ errstr(_("quotactl on %s: %s\n"), quotadev, strerror(errno));
return 1;
}
if (flags & STATEFLAG_VERBOSE)
@@ -208,8 +213,7 @@ static int quotaonoff(char *quotadev, char *quotafile, int type, int flags)
}
qcmd = QCMD(Q_QUOTAON, type);
if (quotactl(qcmd, quotadev, 0, (void *)quotafile) < 0) {
- fprintf(stderr, _("quotaon: using %s on "), quotafile);
- perror(quotadev);
+ errstr(_("using %s on %s: %s\n"), quotafile, quotadev, strerror(errno));
return 1;
}
if (flags & STATEFLAG_VERBOSE)
@@ -227,8 +231,7 @@ static int quotarsquashonoff(const char *quotadev, int type, int flags)
int qcmd = QCMD(Q_V1_RSQUASH, type);
if (quotactl(qcmd, quotadev, 0, (void *)&mode) < 0) {
- fprintf(stderr, _("quotaon: set root_squash on"));
- perror(quotadev);
+ errstr(_("set root_squash on %s: %s\n"), quotadev, strerror(errno));
return 1;
}
if ((flags & STATEFLAG_VERBOSE) && (flags & STATEFLAG_OFF))
@@ -265,12 +268,12 @@ int v1_newstate(struct mntent *mnt, int type, char *file, int flags)
int v2_newstate(struct mntent *mnt, int type, char *file, int flags)
{
const char *dev = get_device_name(mnt->mnt_fsname);
- int err = 1;
+ int errs = 0;
if (!dev)
- return err;
+ return 1;
if (hasquota(mnt, type))
- err = quotaonoff((char *)dev, file, type, flags);
+ errs = quotaonoff((char *)dev, file, type, flags);
free((char *)dev);
- return err;
+ return errs;
}