xref: /csrg-svn/usr.sbin/quotaon/quotaon.c (revision 12662)
1*12662Smckusick #ifndef lint
2*12662Smckusick static char sccsid[] = "@(#)quotaon.c	4.1 (Melbourne) 05/22/83";
3*12662Smckusick #endif
4*12662Smckusick /*
5*12662Smckusick  * Turn quota on/off for a filesystem
6*12662Smckusick  */
7*12662Smckusick #include <sys/param.h>
8*12662Smckusick 
9*12662Smckusick #include <stdio.h>
10*12662Smckusick #include <fstab.h>
11*12662Smckusick 
12*12662Smckusick int	vflag;		/* verbose */
13*12662Smckusick int	aflag;		/* all file systems */
14*12662Smckusick 
15*12662Smckusick main(argc, argv)
16*12662Smckusick 	char **argv;
17*12662Smckusick {
18*12662Smckusick 	register i, on;
19*12662Smckusick 	register struct fstab *fs;
20*12662Smckusick 
21*12662Smckusick again:
22*12662Smckusick 	argc--, argv++;
23*12662Smckusick 	if (argc > 0 && strcmp(*argv, "-v") == 0) {
24*12662Smckusick 		vflag++;
25*12662Smckusick 		goto again;
26*12662Smckusick 	}
27*12662Smckusick 	if (argc > 0 && strcmp(*argv, "-a") == 0) {
28*12662Smckusick 		aflag++;
29*12662Smckusick 		goto again;
30*12662Smckusick 	}
31*12662Smckusick 	if (argc <= 0 || strcmp(*argv, "on") && strcmp(*argv, "off")) {
32*12662Smckusick 		fprintf(stderr,
33*12662Smckusick 			"usage: setquota [-v] [-a] on | off [filesys...]\n");
34*12662Smckusick 		exit(1);
35*12662Smckusick 	}
36*12662Smckusick 	on = strcmp(*argv, "on") == 0;
37*12662Smckusick 	argc--, argv++;
38*12662Smckusick 	setfsent();
39*12662Smckusick 	while ((fs = getfsent()) != NULL) {
40*12662Smckusick 		if (fs->fs_quotafile == 0 || *fs->fs_quotafile == '\0')
41*12662Smckusick 			continue;
42*12662Smckusick 		if (fs->fs_type == 0 || strcmp(fs->fs_type, "rw"))
43*12662Smckusick 			continue;
44*12662Smckusick 		if (!aflag && !oneof(fs->fs_file, argv, argc))
45*12662Smckusick 			continue;
46*12662Smckusick 		if (vflag)
47*12662Smckusick 			printf("%s: quotas turned %s\n", fs->fs_file,
48*12662Smckusick 				on ? "on" : "off");
49*12662Smckusick 		if (on) {
50*12662Smckusick 			char quotafile[MAXPATHLEN + 1];
51*12662Smckusick 
52*12662Smckusick 			(void) sprintf(quotafile, "%s/%s", fs->fs_file,
53*12662Smckusick 			   fs->fs_quotafile);
54*12662Smckusick 			i = setquota(fs->fs_spec, quotafile);
55*12662Smckusick 		} else
56*12662Smckusick 			i = setquota(fs->fs_spec, NULL);
57*12662Smckusick 		if (i < 0) {
58*12662Smckusick 			fprintf(stderr, "setquota: ");
59*12662Smckusick 			perror(fs->fs_spec);
60*12662Smckusick 		}
61*12662Smckusick 	}
62*12662Smckusick 	endfsent();
63*12662Smckusick 	exit(i < 0);
64*12662Smckusick }
65*12662Smckusick 
66*12662Smckusick oneof(target, list, n)
67*12662Smckusick 	char *target, *list[];
68*12662Smckusick 	register int n;
69*12662Smckusick {
70*12662Smckusick 	register int i;
71*12662Smckusick 
72*12662Smckusick 	for (i = 0; i < n; i++)
73*12662Smckusick 		if (strcmp(target, list[i]) == 0)
74*12662Smckusick 			return (1);
75*12662Smckusick 	return (0);
76*12662Smckusick }
77