112662Smckusick #ifndef lint 2*12670Smckusick static char sccsid[] = "@(#)quotaon.c 4.2 (Berkeley, Melbourne) 05/22/83"; 312662Smckusick #endif 412662Smckusick /* 5*12670Smckusick * Turn quota on/off for a filesystem. 6*12670Smckusick * 7*12670Smckusick * NEED TO REFLECT CURRENT STATUS IN MTAB. 812662Smckusick */ 912662Smckusick #include <sys/param.h> 1012662Smckusick #include <stdio.h> 1112662Smckusick #include <fstab.h> 1212662Smckusick 1312662Smckusick int vflag; /* verbose */ 1412662Smckusick int aflag; /* all file systems */ 1512662Smckusick 16*12670Smckusick char *qfname = "quotas"; 17*12670Smckusick char quotafile[MAXPATHLEN + 1]; 18*12670Smckusick 1912662Smckusick main(argc, argv) 20*12670Smckusick int argc; 2112662Smckusick char **argv; 2212662Smckusick { 2312662Smckusick register struct fstab *fs; 24*12670Smckusick char *whoami, *rindex(); 25*12670Smckusick int offmode = 0, errs = 0; 2612662Smckusick 27*12670Smckusick whoami = rindex(*argv, '/') + 1; 28*12670Smckusick if (whoami == (char *)1) 29*12670Smckusick whoami = *argv; 30*12670Smckusick if (strcmp(whoami, "quotaoff") == 0) 31*12670Smckusick offmode++; 32*12670Smckusick else if (strcmp(whoami, "quotaon") != 0) { 33*12670Smckusick fprintf(stderr, "Name must be quotaon or quotaoff not %s\n", 34*12670Smckusick whoami); 35*12670Smckusick exit(1); 36*12670Smckusick } 3712662Smckusick again: 3812662Smckusick argc--, argv++; 3912662Smckusick if (argc > 0 && strcmp(*argv, "-v") == 0) { 4012662Smckusick vflag++; 4112662Smckusick goto again; 4212662Smckusick } 4312662Smckusick if (argc > 0 && strcmp(*argv, "-a") == 0) { 4412662Smckusick aflag++; 4512662Smckusick goto again; 4612662Smckusick } 47*12670Smckusick if (argc <= 0 && !aflag) { 48*12670Smckusick fprintf(stderr, "Usage:\n\t%s [-v] -a\n\t%s [-v] filesys ...\n", 49*12670Smckusick whoami, whoami); 5012662Smckusick exit(1); 5112662Smckusick } 5212662Smckusick setfsent(); 5312662Smckusick while ((fs = getfsent()) != NULL) { 54*12670Smckusick if (fs->fs_type == 0) 5512662Smckusick continue; 56*12670Smckusick if (aflag && strcmp(fs->fs_type, "rq") != 0) 5712662Smckusick continue; 5812662Smckusick if (!aflag && !oneof(fs->fs_file, argv, argc)) 5912662Smckusick continue; 60*12670Smckusick if (offmode) { 61*12670Smckusick if (setquota(fs->fs_spec, NULL) < 0) { 62*12670Smckusick fprintf(stderr, "setquota: "); 63*12670Smckusick perror(fs->fs_spec); 64*12670Smckusick errs++; 65*12670Smckusick continue; 66*12670Smckusick } 67*12670Smckusick if (vflag) 68*12670Smckusick printf("%s: quotas turned off\n", fs->fs_file); 69*12670Smckusick continue; 70*12670Smckusick } 71*12670Smckusick (void) sprintf(quotafile, "%s/%s", fs->fs_file, qfname); 72*12670Smckusick if (setquota(fs->fs_spec, quotafile) < 0) { 7312662Smckusick fprintf(stderr, "setquota: "); 7412662Smckusick perror(fs->fs_spec); 75*12670Smckusick errs++; 76*12670Smckusick continue; 7712662Smckusick } 78*12670Smckusick if (vflag) 79*12670Smckusick printf("%s: quotas turned on\n", fs->fs_file); 8012662Smckusick } 8112662Smckusick endfsent(); 82*12670Smckusick exit(errs); 8312662Smckusick } 8412662Smckusick 8512662Smckusick oneof(target, list, n) 8612662Smckusick char *target, *list[]; 8712662Smckusick register int n; 8812662Smckusick { 8912662Smckusick register int i; 9012662Smckusick 9112662Smckusick for (i = 0; i < n; i++) 9212662Smckusick if (strcmp(target, list[i]) == 0) 9312662Smckusick return (1); 9412662Smckusick return (0); 9512662Smckusick } 96