Module Name: src
Committed By: bouyer
Date: Wed Feb 9 10:21:02 UTC 2011
Modified Files:
src/usr.sbin/quotaon [bouyer-quota2]: Makefile quotaon.c
Log Message:
Make it compile with new quotactl
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.64.1 src/usr.sbin/quotaon/Makefile
cvs rdiff -u -r1.23 -r1.23.2.1 src/usr.sbin/quotaon/quotaon.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/quotaon/Makefile
diff -u src/usr.sbin/quotaon/Makefile:1.5 src/usr.sbin/quotaon/Makefile:1.5.64.1
--- src/usr.sbin/quotaon/Makefile:1.5 Sat Oct 18 04:37:55 1997
+++ src/usr.sbin/quotaon/Makefile Wed Feb 9 10:21:02 2011
@@ -1,9 +1,18 @@
# from: @(#)Makefile 8.1 (Berkeley) 6/6/93
-# $NetBSD: Makefile,v 1.5 1997/10/18 04:37:55 lukem Exp $
+# $NetBSD: Makefile,v 1.5.64.1 2011/02/09 10:21:02 bouyer Exp $
+.include <bsd.own.mk>
PROG= quotaon
+SRCS= quotaon.c
MAN= quotaon.8
MLINKS= quotaon.8 quotaoff.8
LINKS= ${BINDIR}/quotaon ${BINDIR}/quotaoff
+CPPFLAGS+=-I${NETBSDSRCDIR}/sys
+DPADD= ${LIBPROP}
+LDADD= -lprop
+
+.PATH: ${NETBSDSRCDIR}/sys/ufs/ufs
+SRCS+= quota2_prop.c
+
.include <bsd.prog.mk>
Index: src/usr.sbin/quotaon/quotaon.c
diff -u src/usr.sbin/quotaon/quotaon.c:1.23 src/usr.sbin/quotaon/quotaon.c:1.23.2.1
--- src/usr.sbin/quotaon/quotaon.c:1.23 Sat Apr 18 08:20:41 2009
+++ src/usr.sbin/quotaon/quotaon.c Wed Feb 9 10:21:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: quotaon.c,v 1.23 2009/04/18 08:20:41 lukem Exp $ */
+/* $NetBSD: quotaon.c,v 1.23.2.1 2011/02/09 10:21:02 bouyer Exp $ */
/*
* Copyright (c) 1980, 1990, 1993
@@ -42,7 +42,7 @@
#if 0
static char sccsid[] = "@(#)quotaon.c 8.1 (Berkeley) 6/6/93";
#else
-__RCSID("$NetBSD: quotaon.c,v 1.23 2009/04/18 08:20:41 lukem Exp $");
+__RCSID("$NetBSD: quotaon.c,v 1.23.2.1 2011/02/09 10:21:02 bouyer Exp $");
#endif
#endif /* not lint */
@@ -52,7 +52,11 @@
#include <sys/param.h>
#include <sys/file.h>
#include <sys/mount.h>
-#include <ufs/ufs/quota.h>
+
+#include <ufs/ufs/quota2_prop.h>
+#include <ufs/ufs/quota1.h>
+#include <sys/quota.h>
+
#include <err.h>
#include <fstab.h>
@@ -168,27 +172,78 @@
int offmode, type;
char *qfpathname;
{
+ const char *mode = (offmode == 1) ? "off" : "on";
+ prop_dictionary_t dict, data, cmd;
+ prop_array_t cmds, datas;
+ struct plistref pref;
+ int error;
+ int8_t error8;
+
+ dict = quota2_prop_create();
+ cmds = prop_array_create();
+ datas = prop_array_create();
if (strcmp(fs->fs_file, "/") && readonly(fs))
return (1);
+
+ if (dict == NULL || cmds == NULL || datas == NULL)
+ errx(1, "can't allocate proplist");
+
if (offmode) {
- if (quotactl(fs->fs_file, QCMD(Q_QUOTAOFF, type), 0, 0) < 0) {
- warn("%s", fs->fs_file);
- return (1);
- }
- if (vflag)
- printf("%s: %s quotas turned off\n",
- fs->fs_file, qfextension[type]);
- return (0);
+ if (!quota2_prop_add_command(cmds, "quotaoff",
+ qfextension[type], datas))
+ err(1, "prop_add_command");
+ } else {
+ data = prop_dictionary_create();
+ if (data == NULL)
+ errx(1, "can't allocate proplist");
+ if (!prop_dictionary_set_cstring(data, "quotafile",
+ qfpathname))
+ err(1, "prop_dictionary_set(quotafile)");
+ if (!prop_array_add_and_rel(datas, data))
+ err(1, "prop_array_add(data)");
+ if (!quota2_prop_add_command(cmds, "quotaon",
+ qfextension[type], datas))
+ err(1, "prop_add_command");
}
- if (quotactl(fs->fs_file, QCMD(Q_QUOTAON, type), 0, qfpathname) < 0) {
- warn("%s quotas using %s on %s",
- qfextension[type], qfpathname, fs->fs_file);
- return (1);
+ if (!prop_dictionary_set(dict, "commands", cmds))
+ err(1, "prop_dictionary_set(command)");
+
+ if (!prop_dictionary_send_syscall(dict, &pref))
+ err(1, "prop_dictionary_send_syscall");
+ prop_object_release(dict);
+
+ if (quotactl(fs->fs_file, &pref) != 0) {
+ warn("quotactl(%s)", fs->fs_file);
+ return(1);
+ }
+
+ if ((error = prop_dictionary_recv_syscall(&pref, &dict)) != 0) {
+ errx(1, "prop_dictionary_recv_syscall: %s\n",
+ strerror(error));
+ }
+
+ if ((error = quota2_get_cmds(dict, &cmds)) != 0) {
+ errx(1, "quota2_get_cmds: %s\n", strerror(error));
+ }
+ /* only one command, no need to iter */
+ cmd = prop_array_get(cmds, 0);
+ if (cmd == NULL)
+ err(1, "prop_array_get(cmd)");
+
+ if (!prop_dictionary_get_int8(cmd, "return", &error8))
+ err(1, "prop_get(return)");
+
+ if (error8) {
+ warnx("quota%s for %s: %s", mode, fs->fs_file,
+ strerror(error8));
+ return 1;
+ }
+
+ if (vflag) {
+ printf("%s: %s quotas turned %s\n",
+ fs->fs_file, qfextension[type], mode);
}
- if (vflag)
- printf("%s: %s quotas turned on\n", fs->fs_file,
- qfextension[type]);
return (0);
}