cred.h revision 168404
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26/*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
27/*	  All Rights Reserved  	*/
28
29/*
30 * Portions of this source code were derived from Berkeley 4.3 BSD
31 * under license from the Regents of the University of California.
32 */
33
34#ifndef _SYS_CRED_H
35#define	_SYS_CRED_H
36
37#pragma ident	"%Z%%M%	%I%	%E% SMI"
38
39#include <sys/types.h>
40
41#ifdef	__cplusplus
42extern "C" {
43#endif
44
45/*
46 * The credential is an opaque kernel private data structure defined in
47 * <sys/cred_impl.h>.
48 */
49
50typedef struct cred cred_t;
51
52#ifdef _KERNEL
53
54#define	CRED()		curthread->t_cred
55
56struct proc;				/* cred.h is included in proc.h */
57struct prcred;
58
59struct auditinfo_addr;			/* cred.h is included in audit.h */
60
61extern int ngroups_max;
62/*
63 * kcred is used when you need all privileges.
64 */
65extern struct cred *kcred;
66
67extern void cred_init(void);
68extern void crhold(cred_t *);
69extern void crfree(cred_t *);
70extern cred_t *cralloc(void);		/* all but ref uninitialized */
71extern cred_t *crget(void);		/* initialized */
72extern cred_t *crcopy(cred_t *);
73extern void crcopy_to(cred_t *, cred_t *);
74extern cred_t *crdup(cred_t *);
75extern void crdup_to(cred_t *, cred_t *);
76extern cred_t *crgetcred(void);
77extern void crset(struct proc *, cred_t *);
78extern int groupmember(gid_t, const cred_t *);
79extern int supgroupmember(gid_t, const cred_t *);
80extern int hasprocperm(const cred_t *, const cred_t *);
81extern int prochasprocperm(struct proc *, struct proc *, const cred_t *);
82extern int crcmp(const cred_t *, const cred_t *);
83extern cred_t *zone_kcred(void);
84
85extern uid_t crgetuid(const cred_t *);
86extern uid_t crgetruid(const cred_t *);
87extern uid_t crgetsuid(const cred_t *);
88extern gid_t crgetgid(const cred_t *);
89extern gid_t crgetrgid(const cred_t *);
90extern gid_t crgetsgid(const cred_t *);
91extern zoneid_t crgetzoneid(const cred_t *);
92extern projid_t crgetprojid(const cred_t *);
93
94
95extern const struct auditinfo_addr *crgetauinfo(const cred_t *);
96extern struct auditinfo_addr *crgetauinfo_modifiable(cred_t *);
97
98extern uint_t crgetref(const cred_t *);
99
100extern const gid_t *crgetgroups(const cred_t *);
101
102extern int crgetngroups(const cred_t *);
103
104/*
105 * Sets real, effective and/or saved uid/gid;
106 * -1 argument accepted as "no change".
107 */
108extern int crsetresuid(cred_t *, uid_t, uid_t, uid_t);
109extern int crsetresgid(cred_t *, gid_t, gid_t, gid_t);
110
111/*
112 * Sets real, effective and saved uids/gids all to the same
113 * values.  Both values must be non-negative and <= MAXUID
114 */
115extern int crsetugid(cred_t *, uid_t, gid_t);
116
117extern int crsetgroups(cred_t *, int, gid_t *);
118
119/*
120 * Private interface for setting zone association of credential.
121 */
122struct zone;
123extern void crsetzone(cred_t *, struct zone *);
124extern struct zone *crgetzone(const cred_t *);
125
126/*
127 * Private interface for setting project id in credential.
128 */
129extern void crsetprojid(cred_t *, projid_t);
130
131/*
132 * Private interface for nfs.
133 */
134extern cred_t *crnetadjust(cred_t *);
135
136/*
137 * Private interface for procfs.
138 */
139extern void cred2prcred(const cred_t *, struct prcred *);
140
141/*
142 * Private interfaces for Rampart Trusted Solaris.
143 */
144struct ts_label_s;
145extern struct ts_label_s *crgetlabel(const cred_t *);
146extern boolean_t crisremote(const cred_t *);
147
148#endif	/* _KERNEL */
149
150#ifdef	__cplusplus
151}
152#endif
153
154#endif	/* _SYS_CRED_H */
155