Module Name: src Committed By: bouyer Date: Fri Jan 28 22:15:36 UTC 2011
Modified Files: src/tests/fs/ffs/clients [bouyer-quota2]: Makefile src/usr.bin/quota [bouyer-quota2]: Makefile printquota.h quota.c Added Files: src/usr.bin/quota [bouyer-quota2]: getvfsquota.c getvfsquota.h Log Message: Rename getufsquota to getvfsquota, and abstract in its own file. To generate a diff of this commit: cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/tests/fs/ffs/clients/Makefile cvs rdiff -u -r1.6.64.2 -r1.6.64.3 src/usr.bin/quota/Makefile cvs rdiff -u -r0 -r1.1.2.1 src/usr.bin/quota/getvfsquota.c \ src/usr.bin/quota/getvfsquota.h cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/usr.bin/quota/printquota.h cvs rdiff -u -r1.33.2.2 -r1.33.2.3 src/usr.bin/quota/quota.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/fs/ffs/clients/Makefile diff -u src/tests/fs/ffs/clients/Makefile:1.1.2.1 src/tests/fs/ffs/clients/Makefile:1.1.2.2 --- src/tests/fs/ffs/clients/Makefile:1.1.2.1 Fri Jan 28 18:38:08 2011 +++ src/tests/fs/ffs/clients/Makefile Fri Jan 28 22:15:36 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1.2.1 2011/01/28 18:38:08 bouyer Exp $ +# $NetBSD: Makefile,v 1.1.2.2 2011/01/28 22:15:36 bouyer Exp $ # .include <bsd.own.mk> @@ -9,10 +9,11 @@ PROGS= rump_quota rump_repquota .PATH: ${NETBSDSRCDIR}/usr.bin/quota -SRCS.rump_quota= quota.c printquota.c quota_rumpops.c +SRCS.rump_quota= quota.c printquota.c getvfsquota.c quota_rumpops.c SRCS.rump_repquota= printquota.c quota_rumpops.c -CPPFLAGS.quota.c+= -I${NETBSDSRCDIR}/sys -I${NETBSDSRCDIR}/usr.bin/quota -CPPFLAGS.printquota.c+= -I${NETBSDSRCDIR}/sys -I${NETBSDSRCDIR}/usr.bin/quota +CPPFLAGS.quota.c+= -I${NETBSDSRCDIR}/usr.bin/quota +CPPFLAGS.printquota.c+= -I${NETBSDSRCDIR}/usr.bin/quota +CPPFLAGS.getvfsquota.c+=-I${NETBSDSRCDIR}/usr.bin/quota -I${NETBSDSRCDIR}/sys .PATH: ${NETBSDSRCDIR}/usr.sbin/repquota SRCS.rump_repquota+= repquota.c @@ -20,7 +21,7 @@ .PATH: ${NETBSDSRCDIR}/sys/ufs/ufs SRCS.rump_quota+= quota2_prop.c -SRCS.rump_repquota+= quota2_prop.c +SRCS.rump_repquota+= quota2_prop.c quota1_subr.c CPPFLAGS.quota2_prop.c+=-I${NETBSDSRCDIR}/sys -I${NETBSDSRCDIR}/usr.bin/quota DPADD.rump_quota= ${LIBRPCSVC} ${LIBPROP} ${LIBRUMPCLIENT} Index: src/usr.bin/quota/Makefile diff -u src/usr.bin/quota/Makefile:1.6.64.2 src/usr.bin/quota/Makefile:1.6.64.3 --- src/usr.bin/quota/Makefile:1.6.64.2 Fri Jan 21 16:58:06 2011 +++ src/usr.bin/quota/Makefile Fri Jan 28 22:15:36 2011 @@ -1,9 +1,9 @@ -# $NetBSD: Makefile,v 1.6.64.2 2011/01/21 16:58:06 bouyer Exp $ +# $NetBSD: Makefile,v 1.6.64.3 2011/01/28 22:15:36 bouyer Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/6/93 .include <bsd.own.mk> PROG= quota -SRCS= quota.c printquota.c +SRCS= quota.c printquota.c getvfsquota.c CPPFLAGS+=-I${NETBSDSRCDIR}/sys -I${NETBSDSRCDIR}/usr.bin/quota DPADD= ${LIBRPCSVC} ${LIBPROP} Index: src/usr.bin/quota/printquota.h diff -u src/usr.bin/quota/printquota.h:1.1.2.1 src/usr.bin/quota/printquota.h:1.1.2.2 --- src/usr.bin/quota/printquota.h:1.1.2.1 Fri Jan 21 16:58:06 2011 +++ src/usr.bin/quota/printquota.h Fri Jan 28 22:15:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: printquota.h,v 1.1.2.1 2011/01/21 16:58:06 bouyer Exp $ */ +/* $NetBSD: printquota.h,v 1.1.2.2 2011/01/28 22:15:36 bouyer Exp $ */ const char *intprt(uint64_t, int, int); const char *timeprt(time_t); Index: src/usr.bin/quota/quota.c diff -u src/usr.bin/quota/quota.c:1.33.2.2 src/usr.bin/quota/quota.c:1.33.2.3 --- src/usr.bin/quota/quota.c:1.33.2.2 Fri Jan 21 16:58:06 2011 +++ src/usr.bin/quota/quota.c Fri Jan 28 22:15:36 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: quota.c,v 1.33.2.2 2011/01/21 16:58:06 bouyer Exp $ */ +/* $NetBSD: quota.c,v 1.33.2.3 2011/01/28 22:15:36 bouyer Exp $ */ /* * Copyright (c) 1980, 1990, 1993 @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)quota.c 8.4 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: quota.c,v 1.33.2.2 2011/01/21 16:58:06 bouyer Exp $"); +__RCSID("$NetBSD: quota.c,v 1.33.2.3 2011/01/28 22:15:36 bouyer Exp $"); #endif #endif /* not lint */ @@ -56,9 +56,6 @@ #include <sys/mount.h> #include <sys/socket.h> -#include <ufs/ufs/quota2_prop.h> -#include <sys/quota.h> - #include <ctype.h> #include <err.h> #include <errno.h> @@ -72,11 +69,14 @@ #include <time.h> #include <unistd.h> +#include <ufs/ufs/quota2.h> + #include <rpc/rpc.h> #include <rpc/pmap_prot.h> #include <rpcsvc/rquota.h> #include <printquota.h> +#include <getvfsquota.h> struct quotause { struct quotause *next; @@ -100,10 +100,6 @@ void showusrname(const char *); void usage(void); -extern const char *qfextension[]; - -int getufsquota(const char *, struct quota2_entry *, long, int, int, int); - int qflag = 0; int vflag = 0; int hflag = 0; @@ -489,7 +485,7 @@ } else if (strncmp(fst[i].f_fstypename, "ffs", sizeof(fst[i].f_fstypename)) == 0 && (fst[i].f_flag & ST_QUOTA) != 0) { - if (getufsquota(fst[i].f_mntonname, &qup->q2e, + if (getvfsquota(fst[i].f_mntonname, &qup->q2e, id, quotatype, dflag, Dflag) == 0) continue; } else @@ -658,104 +654,3 @@ } while ((c = *s++) != 0); return (1); } - -const char *qfextension[] = INITQFNAMES; - -int -getufsquota(const char *mp, struct quota2_entry *q2e, long id, int type, - int defaultq, int debug) -{ - prop_dictionary_t dict, data, cmd; - prop_array_t cmds, datas; - struct plistref pref; - int error; - int8_t error8; - bool ret; - - dict = quota2_prop_create(); - cmds = prop_array_create(); - datas = prop_array_create(); - data = prop_dictionary_create(); - - if (dict == NULL || cmds == NULL || datas == NULL || data == NULL) - errx(1, "can't allocate proplist"); - - if (defaultq) - ret = prop_dictionary_set_cstring(data, "id", "default"); - else - ret = prop_dictionary_set_uint32(data, "id", id); - if (!ret) - err(1, "prop_dictionary_set(id)"); - - if (!prop_array_add(datas, data)) - err(1, "prop_array_add(data)"); - prop_object_release(data); - if (!quota2_prop_add_command(cmds, "get", qfextension[type], datas)) - err(1, "prop_add_command"); - if (!prop_dictionary_set(dict, "commands", cmds)) - err(1, "prop_dictionary_set(command)"); - if (debug) - printf("message to kernel:\n%s\n", - prop_dictionary_externalize(dict)); - - if (!prop_dictionary_send_syscall(dict, &pref)) - err(1, "prop_dictionary_send_syscall"); - prop_object_release(dict); - - if (quotactl(mp, &pref) != 0) - err(1, "quotactl"); - - if ((error = prop_dictionary_recv_syscall(&pref, &dict)) != 0) { - errx(1, "prop_dictionary_recv_syscall: %s\n", - strerror(error)); - } - if (debug) - printf("reply from kernel:\n%s\n", - prop_dictionary_externalize(dict)); - 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) { - if (error8 != ENOENT && error8 != ENODEV) { - if (defaultq) - fprintf(stderr, "get default %s quota: %s\n", - qfextension[type], strerror(error8)); - else - fprintf(stderr, "get %s quota for %ld: %s\n", - qfextension[type], id, strerror(error8)); - } - prop_object_release(dict); - return (0); - } - datas = prop_dictionary_get(cmd, "data"); - if (datas == NULL) - err(1, "prop_dict_get(datas)"); - - /* only one data, no need to iter */ - if (prop_array_count(datas) == 0) { - /* no quota for this user/group */ - prop_object_release(dict); - return (0); - } - - data = prop_array_get(datas, 0); - if (data == NULL) - err(1, "prop_array_get(data)"); - - error = quota2_dict_get_q2e_usage(data, q2e); - if (error) { - errx(1, "quota2_dict_get_q2e_usage: %s\n", - strerror(error)); - } - prop_object_release(dict); - return (1); -} Added files: Index: src/usr.bin/quota/getvfsquota.c diff -u /dev/null src/usr.bin/quota/getvfsquota.c:1.1.2.1 --- /dev/null Fri Jan 28 22:15:36 2011 +++ src/usr.bin/quota/getvfsquota.c Fri Jan 28 22:15:36 2011 @@ -0,0 +1,147 @@ +/* $NetBSD: getvfsquota.c,v 1.1.2.1 2011/01/28 22:15:36 bouyer Exp $ */ + +/*- + * Copyright (c) 2011 Manuel Bouyer + * All rights reserved. + * This software is distributed under the following condiions + * compliant with the NetBSD foundation policy. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: getvfsquota.c,v 1.1.2.1 2011/01/28 22:15:36 bouyer Exp $"); + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <err.h> +#include <string.h> + +#include <sys/types.h> + +#include <ufs/ufs/quota2_prop.h> +#include <sys/quota.h> + +#include <getvfsquota.h> + +const char *qfextension[] = INITQFNAMES; + +/* retrieve quotas from vfs, for the given user id */ +int +getvfsquota(const char *mp, struct quota2_entry *q2e, long id, int type, + int defaultq, int debug) +{ + prop_dictionary_t dict, data, cmd; + prop_array_t cmds, datas; + struct plistref pref; + int error; + int8_t error8; + bool ret; + + dict = quota2_prop_create(); + cmds = prop_array_create(); + datas = prop_array_create(); + data = prop_dictionary_create(); + + if (dict == NULL || cmds == NULL || datas == NULL || data == NULL) + errx(1, "can't allocate proplist"); + + if (defaultq) + ret = prop_dictionary_set_cstring(data, "id", "default"); + else + ret = prop_dictionary_set_uint32(data, "id", id); + if (!ret) + err(1, "prop_dictionary_set(id)"); + + if (!prop_array_add(datas, data)) + err(1, "prop_array_add(data)"); + prop_object_release(data); + if (!quota2_prop_add_command(cmds, "get", qfextension[type], datas)) + err(1, "prop_add_command"); + if (!prop_dictionary_set(dict, "commands", cmds)) + err(1, "prop_dictionary_set(command)"); + if (debug) + printf("message to kernel:\n%s\n", + prop_dictionary_externalize(dict)); + + if (!prop_dictionary_send_syscall(dict, &pref)) + err(1, "prop_dictionary_send_syscall"); + prop_object_release(dict); + + if (quotactl(mp, &pref) != 0) + err(1, "quotactl"); + + if ((error = prop_dictionary_recv_syscall(&pref, &dict)) != 0) { + errx(1, "prop_dictionary_recv_syscall: %s\n", + strerror(error)); + } + if (debug) + printf("reply from kernel:\n%s\n", + prop_dictionary_externalize(dict)); + 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) { + if (error8 != ENOENT && error8 != ENODEV) { + if (defaultq) + fprintf(stderr, "get default %s quota: %s\n", + qfextension[type], strerror(error8)); + else + fprintf(stderr, "get %s quota for %ld: %s\n", + qfextension[type], id, strerror(error8)); + } + prop_object_release(dict); + return (0); + } + datas = prop_dictionary_get(cmd, "data"); + if (datas == NULL) + err(1, "prop_dict_get(datas)"); + + /* only one data, no need to iter */ + if (prop_array_count(datas) == 0) { + /* no quota for this user/group */ + prop_object_release(dict); + return (0); + } + + data = prop_array_get(datas, 0); + if (data == NULL) + err(1, "prop_array_get(data)"); + + error = quota2_dict_get_q2e_usage(data, q2e); + if (error) { + errx(1, "quota2_dict_get_q2e_usage: %s\n", + strerror(error)); + } + prop_object_release(dict); + return (1); +} Index: src/usr.bin/quota/getvfsquota.h diff -u /dev/null src/usr.bin/quota/getvfsquota.h:1.1.2.1 --- /dev/null Fri Jan 28 22:15:36 2011 +++ src/usr.bin/quota/getvfsquota.h Fri Jan 28 22:15:36 2011 @@ -0,0 +1,5 @@ +/* $NetBSD: getvfsquota.h,v 1.1.2.1 2011/01/28 22:15:36 bouyer Exp $ */ + +int getvfsquota(const char *, struct quota2_entry *, long, int, int, int); + +extern const char *qfextension[];