netbsd: rebase cm at NetBSD 4.0
[openafs.git] / src / afs / NBSD / osi_misc.c
1 /*
2  * osi_misc.c
3  *
4  * $Id: osi_misc.c,v 1.4 2003/10/09 16:13:16 rees Exp $
5  */
6
7 /*
8 copyright 2002
9 the regents of the university of michigan
10 all rights reserved
11
12 permission is granted to use, copy, create derivative works
13 and redistribute this software and such derivative works
14 for any purpose, so long as the name of the university of
15 michigan is not used in any advertising or publicity
16 pertaining to the use or distribution of this software
17 without specific, written prior authorization.  if the
18 above copyright notice or any other identification of the
19 university of michigan is included in any copy of any
20 portion of this software, then the disclaimer below must
21 also be included.
22
23 this software is provided as is, without representation
24 from the university of michigan as to its fitness for any
25 purpose, and without warranty by the university of
26 michigan of any kind, either express or implied, including
27 without limitation the implied warranties of
28 merchantability and fitness for a particular purpose. the
29 regents of the university of michigan shall not be liable
30 for any damages, including special, indirect, incidental, or
31 consequential damages, with respect to any claim arising
32 out of or in connection with the use of the software, even
33 if it has been or is hereafter advised of the possibility of
34 such damages.
35 */
36
37 /*
38  * Copyright 2000, International Business Machines Corporation and others.
39  * All Rights Reserved.
40  *
41  * This software has been released under the terms of the IBM Public
42  * License.  For details, see the LICENSE file in the top-level source
43  * directory or online at http://www.openafs.org/dl/license10.html
44  */
45
46 #include <afsconfig.h>
47 #include "afs/param.h"
48
49
50
51 #include "afs/sysincludes.h"    /* Standard vendor system headers */
52 #include "afs/afsincludes.h"    /* Afs-based standard headers */
53
54 /*
55  * afs_suser() returns true if the caller is superuser, false otherwise.
56  *
57  * Note that it must NOT set errno.
58  */
59
60 /*
61  * Modern NetBSD version of afs_osi_suser().  For cognate code calling
62  * traditional BSD suser, see OBSD/osi_misc.c.
63  */
64 int
65 afs_osi_suser(void *credp)
66 {
67     int code;
68     code = kauth_authorize_generic(credp,
69                                    KAUTH_GENERIC_ISSUSER,
70                                    &curlwp->l_acflag);
71     return (code == 0);
72 }
73
74 /*
75  * Support Alloc_NoSleep.  This should propagate back to OBSD.
76  * Matt.
77  */
78 void *
79 osi_nbsd_Alloc(size_t asize, int cansleep)
80 {
81     void *p;
82     int glocked;
83
84     if (cansleep) {
85         glocked = ISAFS_GLOCK();
86         if (glocked)
87             AFS_GUNLOCK();
88         MALLOC(p, void *, asize, M_AFSGENERIC, M_WAITOK);
89         if (glocked)
90             AFS_GLOCK();
91     } else {
92         MALLOC(p, void *, asize, M_AFSGENERIC, M_NOWAIT);
93     }
94
95     return (p);
96 }
97
98 void
99 osi_nbsd_Free(void *p, size_t asize)
100 {
101     FREE(p, M_AFSGENERIC);
102 }
103
104 inline void *
105 afs_osi_Alloc(size_t asize) {
106     return (osi_nbsd_Alloc(asize, 1));
107 }
108
109 inline void *
110 afs_osi_Alloc_NoSleep(size_t asize) {
111     return (osi_nbsd_Alloc(asize, 0));
112 }
113
114 inline void
115 afs_osi_Free(void *buf, size_t asize) {
116     osi_nbsd_Free(buf, asize);
117 }
118
119 inline void
120 afs_osi_FreeStr(char *x)
121 {
122     afs_osi_Free(x, strlen(x) + 1);
123 }
124
125 /* XXXX OpenBSD avoids space pool, presumably Rees believed the kernel
126  * allocator did as well or better */
127 #if 0
128 void
129 osi_FreeLargeSpace(void *p)
130 {
131     osi_nbsd_Free(p, 0);
132 }
133
134 /* XXXX OpenBSD avoids space pool, presumably Rees believed the kernel
135  * allocator did as well or better */
136 #if 0
137 void
138 osi_FreeSmallSpace(void *p)
139 {
140     osi_nbsd_Free(p, 0);
141 }
142
143 void *
144 osi_AllocLargeSpace(size_t size)
145 {
146     AFS_ASSERT_GLOCK();
147     AFS_STATCNT(osi_AllocLargeSpace);
148     return (osi_nbsd_Alloc(size, 1));
149 }
150
151 void *
152 osi_AllocSmallSpace(size_t size)
153 {
154     AFS_ASSERT_GLOCK();
155     AFS_STATCNT(osi_AllocSmallSpace);
156     return (osi_nbsd_Alloc(size, 1));
157 }
158
159 #endif /* Space undef */
160
161 int
162 afs_syscall_icreate(dev, near_inode, param1, param2, param3, param4, retval)
163     long *retval;
164     long dev, near_inode, param1, param2, param3, param4;
165 {
166     return EINVAL;
167 }
168
169 #endif /* Space undef */
170
171 int
172 afs_syscall_iopen(dev, inode, usrmod, retval)
173     long *retval;
174     int dev, inode, usrmod;
175 {
176     return EINVAL;
177 }
178
179 int
180 afs_syscall_iincdec(dev, inode, inode_p1, amount)
181      int dev, inode, inode_p1, amount;
182 {
183     return EINVAL;
184 }
185
186 inline gid_t
187 osi_crgroupbyid(afs_ucred_t *acred, int gindex)
188 {
189     struct kauth_cred *cr = acred;
190     return (cr->cr_groups[gindex]);
191 }
192
193 /*
194  * just calls kern_time.c:settime()
195  */
196 void
197 afs_osi_SetTime(osi_timeval_t *atv)
198 {
199 #if 0
200     printf("afs attempted to set clock; use \"afsd -nosettime\"\n");
201 #else
202     struct timespec ts;
203     AFS_GUNLOCK();
204     ts.tv_sec = atv->tv_sec;
205     ts.tv_nsec = atv->tv_usec * 1000;
206     settime(osi_curproc()->l_proc, &ts); /* really takes a process */
207     AFS_GLOCK();
208 #endif
209 }