xref: /netbsd/lib/libquota/quota_schema.c (revision 2f739562)
1*2f739562Sdholland /*	$NetBSD: quota_schema.c,v 1.7 2012/02/01 05:46:46 dholland Exp $	*/
224ec8648Sdholland /*-
324ec8648Sdholland  * Copyright (c) 2011 The NetBSD Foundation, Inc.
424ec8648Sdholland  * All rights reserved.
524ec8648Sdholland  *
624ec8648Sdholland  * This code is derived from software contributed to The NetBSD Foundation
724ec8648Sdholland  * by David A. Holland.
824ec8648Sdholland  *
924ec8648Sdholland  * Redistribution and use in source and binary forms, with or without
1024ec8648Sdholland  * modification, are permitted provided that the following conditions
1124ec8648Sdholland  * are met:
1224ec8648Sdholland  * 1. Redistributions of source code must retain the above copyright
1324ec8648Sdholland  *    notice, this list of conditions and the following disclaimer.
1424ec8648Sdholland  * 2. Redistributions in binary form must reproduce the above copyright
1524ec8648Sdholland  *    notice, this list of conditions and the following disclaimer in the
1624ec8648Sdholland  *    documentation and/or other materials provided with the distribution.
1724ec8648Sdholland  *
1824ec8648Sdholland  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1924ec8648Sdholland  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2024ec8648Sdholland  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2124ec8648Sdholland  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2224ec8648Sdholland  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2324ec8648Sdholland  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2424ec8648Sdholland  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2524ec8648Sdholland  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2624ec8648Sdholland  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2724ec8648Sdholland  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2824ec8648Sdholland  * POSSIBILITY OF SUCH DAMAGE.
2924ec8648Sdholland  */
3024ec8648Sdholland 
3124ec8648Sdholland #include <sys/cdefs.h>
32*2f739562Sdholland __RCSID("$NetBSD: quota_schema.c,v 1.7 2012/02/01 05:46:46 dholland Exp $");
3324ec8648Sdholland 
34ef4f90bcSdholland #include <sys/types.h>
35ef4f90bcSdholland #include <sys/statvfs.h>
36ef4f90bcSdholland #include <stdlib.h>
37ef4f90bcSdholland #include <string.h>
3824ec8648Sdholland #include <errno.h>
3924ec8648Sdholland 
4024ec8648Sdholland #include <quota.h>
41ef4f90bcSdholland #include "quotapvt.h"
4224ec8648Sdholland 
43ef4f90bcSdholland /*
44ef4f90bcSdholland  * Functions for getting information about idtypes and such.
45ef4f90bcSdholland  */
46ef4f90bcSdholland 
4724ec8648Sdholland const char *
quota_getimplname(struct quotahandle * qh)4824ec8648Sdholland quota_getimplname(struct quotahandle *qh)
4924ec8648Sdholland {
50dfd45e1cSdholland 	switch (qh->qh_mode) {
51dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
52ef4f90bcSdholland 		/* XXX this should maybe report the rquotad protocol version */
53ef4f90bcSdholland 		return "nfs via rquotad";
54dfd45e1cSdholland 
55dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
56abf0121aSdholland 		return __quota_oldfiles_getimplname(qh);
57abf0121aSdholland 
58abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
59abf0121aSdholland 		return __quota_kernel_getimplname(qh);
60dfd45e1cSdholland 
61dfd45e1cSdholland 	    default:
62dfd45e1cSdholland 		break;
63ef4f90bcSdholland 	}
64dfd45e1cSdholland 	errno = EINVAL;
65dfd45e1cSdholland 	return NULL;
6624ec8648Sdholland }
6724ec8648Sdholland 
68f9a7ccabSdholland unsigned
quota_getrestrictions(struct quotahandle * qh)69f9a7ccabSdholland quota_getrestrictions(struct quotahandle *qh)
70f9a7ccabSdholland {
71f9a7ccabSdholland 	switch (qh->qh_mode) {
72f9a7ccabSdholland 	    case QUOTA_MODE_NFS:
73f9a7ccabSdholland 		/* XXX this should maybe report the rquotad protocol version */
74f9a7ccabSdholland 		return QUOTA_RESTRICT_32BIT | QUOTA_RESTRICT_READONLY;
75f9a7ccabSdholland 
76f9a7ccabSdholland 	    case QUOTA_MODE_OLDFILES:
77f9a7ccabSdholland 		return QUOTA_RESTRICT_NEEDSQUOTACHECK |
78f9a7ccabSdholland 			QUOTA_RESTRICT_UNIFORMGRACE |
79f9a7ccabSdholland 			QUOTA_RESTRICT_32BIT;
80abf0121aSdholland 
81abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
82abf0121aSdholland 		return __quota_kernel_getrestrictions(qh);
83abf0121aSdholland 
84f9a7ccabSdholland 	    default:
85f9a7ccabSdholland 		break;
86f9a7ccabSdholland 	}
87f9a7ccabSdholland 	errno = EINVAL;
88f9a7ccabSdholland 	return 0;
89f9a7ccabSdholland }
90f9a7ccabSdholland 
91*2f739562Sdholland int
quota_getnumidtypes(struct quotahandle * qh)9224ec8648Sdholland quota_getnumidtypes(struct quotahandle *qh)
9324ec8648Sdholland {
94dfd45e1cSdholland 	switch (qh->qh_mode) {
95dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
96dfd45e1cSdholland 		/* XXX for old rquotad versions this should be 1... */
97dfd45e1cSdholland 		return 2;
98dfd45e1cSdholland 
99abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
100abf0121aSdholland 		return __quota_kernel_getnumidtypes(qh);
101dfd45e1cSdholland 
102dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
103dfd45e1cSdholland 	    default:
104dfd45e1cSdholland 		break;
105dfd45e1cSdholland 	}
106dfd45e1cSdholland 	return 2;
10724ec8648Sdholland }
10824ec8648Sdholland 
10924ec8648Sdholland const char *
quota_idtype_getname(struct quotahandle * qh,int idtype)11024ec8648Sdholland quota_idtype_getname(struct quotahandle *qh, int idtype)
11124ec8648Sdholland {
112dfd45e1cSdholland 	switch (qh->qh_mode) {
113abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
114abf0121aSdholland 		return __quota_kernel_idtype_getname(qh, idtype);
115dfd45e1cSdholland 
116dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
117dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
118dfd45e1cSdholland 		break;
119dfd45e1cSdholland 	}
120dfd45e1cSdholland 
121dfd45e1cSdholland 	switch (idtype) {
122dfd45e1cSdholland 	    case QUOTA_IDTYPE_USER:
123dfd45e1cSdholland 		return "user";
124dfd45e1cSdholland 
125dfd45e1cSdholland 	    case QUOTA_IDTYPE_GROUP:
126dfd45e1cSdholland 		return "group";
127dfd45e1cSdholland 
128dfd45e1cSdholland 	    default:
129dfd45e1cSdholland 		break;
130dfd45e1cSdholland 	}
131dfd45e1cSdholland 	errno = EINVAL;
132dfd45e1cSdholland 	return "???";
133ef4f90bcSdholland }
13424ec8648Sdholland 
135*2f739562Sdholland int
quota_getnumobjtypes(struct quotahandle * qh)13624ec8648Sdholland quota_getnumobjtypes(struct quotahandle *qh)
13724ec8648Sdholland {
138dfd45e1cSdholland 	switch (qh->qh_mode) {
139abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
140abf0121aSdholland 		return __quota_kernel_getnumobjtypes(qh);
141dfd45e1cSdholland 
142dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
143dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
144dfd45e1cSdholland 	    default:
145dfd45e1cSdholland 		break;
146dfd45e1cSdholland 	}
147dfd45e1cSdholland 	return 2;
14824ec8648Sdholland }
14924ec8648Sdholland 
15024ec8648Sdholland const char *
quota_objtype_getname(struct quotahandle * qh,int objtype)15124ec8648Sdholland quota_objtype_getname(struct quotahandle *qh, int objtype)
15224ec8648Sdholland {
153dfd45e1cSdholland 	switch (qh->qh_mode) {
154abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
155abf0121aSdholland 		return __quota_kernel_objtype_getname(qh, objtype);
156dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
157dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
158dfd45e1cSdholland 	    default:
159dfd45e1cSdholland 		break;
160dfd45e1cSdholland 	}
161dfd45e1cSdholland 
162dfd45e1cSdholland 	switch (objtype) {
163dfd45e1cSdholland 	    case QUOTA_OBJTYPE_BLOCKS:
164dfd45e1cSdholland 		return "block";
165dfd45e1cSdholland 	    case QUOTA_OBJTYPE_FILES:
166dfd45e1cSdholland 		return "file";
167dfd45e1cSdholland 	    default:
168dfd45e1cSdholland 		break;
169dfd45e1cSdholland 	}
170dfd45e1cSdholland 	errno = EINVAL;
171dfd45e1cSdholland 	return "???"; /* ? */
172ef4f90bcSdholland }
17324ec8648Sdholland 
17424ec8648Sdholland int
quota_objtype_isbytes(struct quotahandle * qh,int objtype)17524ec8648Sdholland quota_objtype_isbytes(struct quotahandle *qh, int objtype)
17624ec8648Sdholland {
177dfd45e1cSdholland 	switch (qh->qh_mode) {
178abf0121aSdholland 	    case QUOTA_MODE_KERNEL:
179abf0121aSdholland 		return __quota_kernel_objtype_isbytes(qh, objtype);
180dfd45e1cSdholland 	    case QUOTA_MODE_NFS:
181dfd45e1cSdholland 	    case QUOTA_MODE_OLDFILES:
182dfd45e1cSdholland 	    default:
183dfd45e1cSdholland 		break;
184dfd45e1cSdholland 	}
185dfd45e1cSdholland 
186dfd45e1cSdholland 	switch (objtype) {
187dfd45e1cSdholland 	    case QUOTA_OBJTYPE_BLOCKS:
188dfd45e1cSdholland 		return 1;
189dfd45e1cSdholland 	    case QUOTA_OBJTYPE_FILES:
190dfd45e1cSdholland 		return 0;
191dfd45e1cSdholland 	    default:
192dfd45e1cSdholland 		break;
193dfd45e1cSdholland 	}
194dfd45e1cSdholland 	errno = EINVAL;
195dfd45e1cSdholland 	return 0; /* ? */
19624ec8648Sdholland }
197