Home | History | Annotate | Download | only in sys
      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 2008 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	"@(#)cred.h	1.32	08/01/04 SMI"
     38 
     39 #include <sys/types.h>
     40 
     41 #ifdef	__cplusplus
     42 extern "C" {
     43 #endif
     44 
     45 /*
     46  * The credential is an opaque kernel private data structure defined in
     47  * <sys/cred_impl.h>.
     48  */
     49 
     50 typedef struct cred cred_t;
     51 
     52 #ifdef _KERNEL
     53 
     54 #define	CRED()		curthread->t_cred
     55 
     56 struct proc;				/* cred.h is included in proc.h */
     57 struct prcred;
     58 struct ksid;
     59 struct ksidlist;
     60 
     61 struct auditinfo_addr;			/* cred.h is included in audit.h */
     62 
     63 extern int ngroups_max;
     64 /*
     65  * kcred is used when you need all privileges.
     66  */
     67 extern struct cred *kcred;
     68 
     69 extern void cred_init(void);
     70 extern void crhold(cred_t *);
     71 extern void crfree(cred_t *);
     72 extern cred_t *cralloc(void);		/* all but ref uninitialized */
     73 extern cred_t *cralloc_ksid(void);	/* cralloc() + ksid alloc'ed */
     74 extern cred_t *crget(void);		/* initialized */
     75 extern cred_t *crcopy(cred_t *);
     76 extern void crcopy_to(cred_t *, cred_t *);
     77 extern cred_t *crdup(cred_t *);
     78 extern void crdup_to(cred_t *, cred_t *);
     79 extern cred_t *crgetcred(void);
     80 extern void crset(struct proc *, cred_t *);
     81 extern int groupmember(gid_t, const cred_t *);
     82 extern int supgroupmember(gid_t, const cred_t *);
     83 extern int hasprocperm(const cred_t *, const cred_t *);
     84 extern int prochasprocperm(struct proc *, struct proc *, const cred_t *);
     85 extern int crcmp(const cred_t *, const cred_t *);
     86 extern cred_t *zone_kcred(void);
     87 
     88 extern uid_t crgetuid(const cred_t *);
     89 extern uid_t crgetruid(const cred_t *);
     90 extern uid_t crgetsuid(const cred_t *);
     91 extern gid_t crgetgid(const cred_t *);
     92 extern gid_t crgetrgid(const cred_t *);
     93 extern gid_t crgetsgid(const cred_t *);
     94 extern zoneid_t crgetzoneid(const cred_t *);
     95 extern projid_t crgetprojid(const cred_t *);
     96 
     97 extern cred_t *crgetmapped(const cred_t *);
     98 
     99 
    100 extern const struct auditinfo_addr *crgetauinfo(const cred_t *);
    101 extern struct auditinfo_addr *crgetauinfo_modifiable(cred_t *);
    102 
    103 extern uint_t crgetref(const cred_t *);
    104 
    105 extern const gid_t *crgetgroups(const cred_t *);
    106 
    107 extern int crgetngroups(const cred_t *);
    108 
    109 /*
    110  * Sets real, effective and/or saved uid/gid;
    111  * -1 argument accepted as "no change".
    112  */
    113 extern int crsetresuid(cred_t *, uid_t, uid_t, uid_t);
    114 extern int crsetresgid(cred_t *, gid_t, gid_t, gid_t);
    115 
    116 /*
    117  * Sets real, effective and saved uids/gids all to the same
    118  * values.  Both values must be non-negative and <= MAXUID
    119  */
    120 extern int crsetugid(cred_t *, uid_t, gid_t);
    121 
    122 extern int crsetgroups(cred_t *, int, gid_t *);
    123 
    124 /*
    125  * Private interface for setting zone association of credential.
    126  */
    127 struct zone;
    128 extern void crsetzone(cred_t *, struct zone *);
    129 extern struct zone *crgetzone(const cred_t *);
    130 
    131 /*
    132  * Private interface for setting project id in credential.
    133  */
    134 extern void crsetprojid(cred_t *, projid_t);
    135 
    136 /*
    137  * Private interface for nfs.
    138  */
    139 extern cred_t *crnetadjust(cred_t *);
    140 
    141 /*
    142  * Private interface for procfs.
    143  */
    144 extern void cred2prcred(const cred_t *, struct prcred *);
    145 
    146 /*
    147  * Private interfaces for Rampart Trusted Solaris.
    148  */
    149 struct ts_label_s;
    150 extern struct ts_label_s *crgetlabel(const cred_t *);
    151 extern boolean_t crisremote(const cred_t *);
    152 
    153 /*
    154  * Private interfaces for ephemeral uids.
    155  */
    156 #define	VALID_UID(id, zn)					\
    157 	((id) <= MAXUID || valid_ephemeral_uid((zn), (id)))
    158 
    159 #define	VALID_GID(id, zn)					\
    160 	((id) <= MAXUID || valid_ephemeral_gid((zn), (id)))
    161 
    162 extern boolean_t valid_ephemeral_uid(struct zone *, uid_t);
    163 extern boolean_t valid_ephemeral_gid(struct zone *, gid_t);
    164 
    165 extern int eph_uid_alloc(struct zone *, int, uid_t *, int);
    166 extern int eph_gid_alloc(struct zone *, int, gid_t *, int);
    167 
    168 extern void crsetsid(cred_t *, struct ksid *, int);
    169 extern void crsetsidlist(cred_t *, struct ksidlist *);
    170 
    171 extern struct ksid *crgetsid(const cred_t *, int);
    172 extern struct ksidlist *crgetsidlist(const cred_t *);
    173 
    174 extern int crsetpriv(cred_t *, ...);
    175 
    176 #endif	/* _KERNEL */
    177 
    178 #ifdef	__cplusplus
    179 }
    180 #endif
    181 
    182 #endif	/* _SYS_CRED_H */
    183