usr/src/lib/libc/port/gen/ucred.c
author Casper H.S. Dik <Casper.Dik@Sun.COM>
Wed, 28 Apr 2010 10:01:37 +0200
changeset 12273 63678502e95e
parent 7753 ebbac916a413
permissions -rw-r--r--
PSARC 2009/377 In-kernel pfexec implementation. PSARC 2009/378 Basic File Privileges PSARC 2010/072 RBAC update: user attrs from profiles 4912090 pfzsh(1) should exist 4912093 pfbash(1) should exist 4912096 pftcsh(1) should exist 6440298 Expand the basic privilege set in order to restrict file access 6859862 Move pfexec into the kernel 6919171 cred_t sidesteps kmem_debug; we need to be able to detect bad hold/free when they occur 6923721 The new SYS_SMB privilege is not backward compatible 6937562 autofs doesn't remove its door when the zone shuts down 6937727 Zones stuck on deathrow; netstack_zone keeps a credential reference to the zone 6940159 Implement PSARC 2010/072
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
6812
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    21
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
6812
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    23
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
6812
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    28
#pragma weak _ucred_free = ucred_free
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    29
#pragma weak _ucred_get = ucred_get
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    30
#pragma weak _ucred_getegid = ucred_getegid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    31
#pragma weak _ucred_geteuid = ucred_geteuid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    32
#pragma weak _ucred_getgroups = ucred_getgroups
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    33
#pragma weak _ucred_getpflags = ucred_getpflags
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    34
#pragma weak _ucred_getpid = ucred_getpid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    35
#pragma weak _ucred_getzoneid = ucred_getzoneid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    36
#pragma weak _ucred_getprojid = ucred_getprojid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    37
#pragma weak _ucred_getprivset = ucred_getprivset
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    38
#pragma weak _ucred_getrgid = ucred_getrgid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    39
#pragma weak _ucred_getruid = ucred_getruid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    40
#pragma weak _ucred_getsgid = ucred_getsgid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    41
#pragma weak _ucred_getsuid = ucred_getsuid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    42
#pragma weak _ucred_getauid = ucred_getauid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    43
#pragma weak _ucred_getasid = ucred_getasid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    44
#pragma weak _ucred_getatid = ucred_getatid
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    45
#pragma weak _ucred_getlabel = ucred_getlabel
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    46
#pragma weak _ucred_getamask = ucred_getamask
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    47
#pragma weak _ucred_size = ucred_size
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
6812
febeba71273d PSARC 2008/309 expunge synonyms.h
raf
parents: 4321
diff changeset
    49
#include "lint.h"
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
#define	_STRUCTURED_PROC	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
#include "priv_private.h"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
#include <errno.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
#include <priv.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
#include <stdarg.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#include <stdlib.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#include <stdio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
#include <unistd.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
#include <ucred.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
#include <limits.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
#include <fcntl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#include <door.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
#include <alloca.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
#include <sys/ucred.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
#include <sys/procfs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
#include <sys/sysmacros.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
#include <sys/zone.h>
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
    69
#include <tsol/label.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
ucred_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
_ucred_alloc(void)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	ucred_t *r;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
	size_t sz = ucred_size();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	r = malloc(sz);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	if (r != NULL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
		r->uc_size = (uint32_t)sz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
	return (r);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
ucred_free(ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	free(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
ucred_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
ucred_get(pid_t pid)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	ucred_t *uc;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	uc = _ucred_alloc();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	if (uc == NULL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
		return (NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	if (syscall(SYS_ucredsys, UCREDSYS_UCREDGET, pid, uc) != 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
		ucred_free(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
		return (NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	return (uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
uid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
ucred_geteuid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   118
		return ((uid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	return (cr->pr_euid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
uid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
ucred_getruid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   132
		return ((uid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	return (cr->pr_ruid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
uid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
ucred_getsuid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   146
		return ((uid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	return (cr->pr_suid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
gid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
ucred_getegid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   160
		return ((gid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	return (cr->pr_egid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
gid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
ucred_getrgid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   174
		return ((gid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
	return (cr->pr_rgid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
gid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
ucred_getsgid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
		errno = EINVAL;
4321
a8930ec16e52 PSARC 2007/064 Unified POSIX and Windows Credentials for Solaris
casper
parents: 1676
diff changeset
   188
		return ((gid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	return (cr->pr_sgid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
ucred_getgroups(const ucred_t *uc, const gid_t **grps)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	const prcred_t *cr = UCCRED(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	if (cr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
		return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	if (cr->pr_ngroups > 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
		*grps = &cr->pr_groups[0];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
		*grps = NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	return (cr->pr_ngroups);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
const priv_set_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
ucred_getprivset(const ucred_t *uc, priv_ptype_t set)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
	const prpriv_t *pr = UCPRIV(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	int pset = priv_getsetbyname(set);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	priv_data_t *d;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	if (pr == NULL || pset == -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
		return (NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	LOADPRIVDATA(d);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	return ((const priv_set_t *)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	    &pr->pr_sets[d->pd_pinfo->priv_setsize * pset]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
pid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
ucred_getpid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
	if (uc->uc_pid == -1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	return (uc->uc_pid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
projid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
ucred_getprojid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
	if (uc->uc_projid == -1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	return (uc->uc_projid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
zoneid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
ucred_getzoneid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	if (uc->uc_zoneid < MIN_ZONEID || uc->uc_zoneid > MAX_ZONEID) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
		return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
	return (uc->uc_zoneid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
1676
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   264
bslabel_t *
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   265
ucred_getlabel(const ucred_t *uc)
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   266
{
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   267
	/* LINTED: alignment */
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   268
	bslabel_t *slabel = UCLABEL(uc);
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   269
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   270
	if (!is_system_labeled() || slabel == NULL) {
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   271
		errno = EINVAL;
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   272
		return (NULL);
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   273
	}
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   274
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   275
	return (slabel);
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   276
}
37f4a3e2bd99 PSARC/2002/762 Layered Trusted Solaris
jpk
parents: 0
diff changeset
   277
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
 * For now, assume single bit flags.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
uint_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
ucred_getpflags(const ucred_t *uc, uint_t flag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	prpriv_t *pr = UCPRIV(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	char *x, *end;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
	if (pr == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
		return ((uint_t)-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	end = (char *)pr + PRIV_PRPRIV_SIZE(pr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	x = end - pr->pr_infosize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	while (x < end) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
		/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
		priv_info_t *pi = (priv_info_t *)x;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
		priv_info_uint_t *pii;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
		switch (pi->priv_info_type) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
		case PRIV_INFO_FLAGS:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
			/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
			pii = (priv_info_uint_t *)x;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
			return ((pii->val & flag) ? 1 : 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
		/* Forward progress */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
		if (pi->priv_info_size < sizeof (priv_info_t))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
			break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
		x += pi->priv_info_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	return ((uint_t)-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
au_id_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
ucred_getauid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	const auditinfo64_addr_t *ainfo = UCAUD(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	if (ainfo == NULL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
		return (AU_NOAUDITID);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	return (ainfo->ai_auid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
au_asid_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
ucred_getasid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
	const auditinfo64_addr_t *ainfo = UCAUD(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
	if (ainfo == NULL)
7753
ebbac916a413 1207395 au_event_t is a currently a short. It should be redefined to be a u_short
Tony Nguyen <Ton.Nguyen@Sun.COM>
parents: 6812
diff changeset
   336
		return ((au_asid_t)-1);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	return (ainfo->ai_asid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
const au_tid64_addr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
ucred_getatid(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	const auditinfo64_addr_t *ainfo = UCAUD(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
	if (ainfo == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
		return (NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
	return (&ainfo->ai_termid);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
const au_mask_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
ucred_getamask(const ucred_t *uc)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
	/* LINTED: alignment */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
	const auditinfo64_addr_t *ainfo = UCAUD(uc);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
	if (ainfo == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
		errno = EINVAL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
		return (NULL);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
	return (&ainfo->ai_mask);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
size_t
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
ucred_size(void)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
	priv_data_t *d;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
	LOADPRIVDATA(d);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
	return (d->pd_ucredsize);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
}