usr/src/lib/libc/port/gen/ucred.c
author Jon Tibble <meths@btinternet.com>
Thu, 09 Dec 2010 22:32:39 +0100
changeset 13255 4afa820d78b9
parent 7753 ebbac916a413
permissions -rw-r--r--
298 SPARC build fails in smt_pause.o 478 Build needs fixing for pkgdepend flag day Reviewed by: [email protected] Reviewed by: [email protected] Reviewed by: [email protected] Approved by: [email protected]
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
}