usr/src/lib/libsecdb/common/getexecattr.c
author Casper H.S. Dik <Casper.Dik@Sun.COM>
Wed, 28 Apr 2010 10:01:37 +0200
changeset 12273 63678502e95e
parent 10020 ff5f2b3729b6
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
2830
5228d1267a01 PSARC 2005/133 Sparks: Name Service Switch 2
djl
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
5228d1267a01 PSARC 2005/133 Sparks: Name Service Switch 2
djl
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
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
    22
 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#include <stdio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#include <string.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
#include <stdlib.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#include <nss_dbdefs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#include <deflt.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <exec_attr.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <user_attr.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <auth_attr.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <prof_attr.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <getxby_door.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/mman.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
/* Externs from libnsl */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
extern execstr_t *_getexecattr(execstr_t *, char *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
extern void _setexecattr(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
extern void _endexecattr(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
extern execstr_t *_getexecprof(const char *, const char *, const char *, int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
    execstr_t *, char *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
extern userstr_t *_getusernam(const char *, userstr_t *, char *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
extern userstr_t *_getuserattr(userstr_t *, char *, int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
extern char *_strtok_escape(char *, char *, char **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
extern char *_strdup_null(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
static execattr_t *userprof(const char *, const char *, const char *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
static execattr_t *get_tail(execattr_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
static execattr_t *execstr2attr(execstr_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
getexecattr()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
	int		err = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
	char		buf[NSS_BUFLEN_EXECATTR];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	execstr_t	exec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
	execstr_t	*tmp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
	tmp = _getexecattr(&exec, buf, NSS_BUFLEN_EXECATTR, &err);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
	return (execstr2attr(tmp));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
getexecprof(const char *name, const char *type, const char *id, int search_flag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	int		err = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	char		unique[NSS_BUFLEN_EXECATTR];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	char		buf[NSS_BUFLEN_EXECATTR];
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
    74
	execattr_t	*head = NULL;
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
    75
	execattr_t	*prev = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
	execstr_t	exec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	execstr_t	*tmp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	(void) memset(unique, 0, NSS_BUFLEN_EXECATTR);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
	(void) memset(&exec, 0, sizeof (execstr_t));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
    82
	if (!IS_GET_ONE(search_flag) && !IS_GET_ALL(search_flag)) {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
    83
		return (NULL);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
	if ((name == NULL) && (type == NULL) && (id == NULL)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
		setexecattr();
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
    88
		if (IS_GET_ONE(search_flag)) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
			head = getexecattr();
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
    90
		} else if (IS_GET_ALL(search_flag)) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
			head = getexecattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
			prev = head;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
			while (prev != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
				prev->next = getexecattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
				prev = prev->next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
			};
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
    97
		} else {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
    98
			head = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
		endexecattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
		return (head);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	tmp = _getexecprof(name,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	    type,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
	    id,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	    search_flag,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	    &exec,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	    buf,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	    NSS_BUFLEN_EXECATTR,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	    &err);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	return (execstr2attr(tmp));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
getexecuser(const char *username, const char *type, const char *id,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
    int search_flag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
	int		err = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	char		buf[NSS_BUFLEN_USERATTR];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	userstr_t	user;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	userstr_t	*utmp;
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   124
	execattr_t	*head = NULL;
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   125
	execattr_t	*prev =  NULL;
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   126
	execattr_t	*new = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
   128
	if (!IS_GET_ONE(search_flag) && !IS_GET_ALL(search_flag)) {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   129
		return (NULL);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	if (username == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
		setuserattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
		/* avoid userstr2attr mallocs by calling libnsl directly */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
		utmp = _getuserattr(&user, buf, NSS_BUFLEN_USERATTR, &err);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
		if (utmp == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
			return (head);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
		}
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
   139
		if (IS_GET_ONE(search_flag)) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
			head = userprof((const char *)(utmp->name), type, id,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
			    search_flag);
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
   142
		} else if (IS_GET_ALL(search_flag)) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
			head = userprof((const char *)(utmp->name), type, id,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
			    search_flag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
			if (head != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
				prev = get_tail(head);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
			while ((utmp = _getuserattr(&user,
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   149
			    buf, NSS_BUFLEN_USERATTR, &err)) != NULL) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
				if ((new =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
				    userprof((const char *)(utmp->name),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
				    type, id, search_flag)) != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
					if (prev != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
						prev->next = new;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
						prev = get_tail(prev->next);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
					} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
						head = new;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
						prev = get_tail(head);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
					}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
				}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
			}
10020
ff5f2b3729b6 6848927 sulogin accepts empty username
Joep Vesseur <Joep.Vesseur@Sun.COM>
parents: 6059
diff changeset
   162
		} else {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   163
			head = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
		enduserattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
		head = userprof(username, type, id, search_flag);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	return (head);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
match_execattr(execattr_t *exec, const char *profname, const char *type,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
    const char *id)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
{
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   178
	execattr_t	*execp = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
	for (execp = exec; execp != NULL; execp = execp->next) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
		if ((profname && execp->name &&
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
		    (strcmp(profname, execp->name) != 0)) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
		    (type && execp->type && (strcmp(type, execp->type) != 0)) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
		    (id && execp->id && (strcmp(id, execp->id) != 0)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
			continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	return (execp);
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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
setexecattr()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	_setexecattr();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
endexecattr()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
	_endexecattr();
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
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
free_execattr(execattr_t *exec)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
{
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   209
	if (exec != NULL) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
		free(exec->name);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
		free(exec->type);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
		free(exec->policy);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
		free(exec->res1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
		free(exec->res2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
		free(exec->id);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
		_kva_free(exec->attr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
		free_execattr(exec->next);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
		free(exec);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   222
typedef struct call {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   223
	const char	*type;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   224
	const char	*id;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   225
	int		sflag;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   226
} call;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   227
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   228
typedef struct result {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   229
	execattr_t *head;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   230
	execattr_t *prev;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   231
} result;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   232
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   233
/*ARGSUSED*/
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   234
static int
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   235
findexecattr(const char *prof, kva_t *kva, void *ctxt, void *res)
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   236
{
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   237
	execattr_t *exec;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   238
	call *c = ctxt;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   239
	result *r = res;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   240
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   241
	if ((exec = getexecprof(prof, c->type, c->id, c->sflag)) != NULL) {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   242
		if (IS_GET_ONE(c->sflag)) {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   243
			r->head = exec;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   244
			return (1);
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   245
		} else if (IS_GET_ALL(c->sflag)) {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   246
			if (r->head == NULL) {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   247
				r->head = exec;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   248
				r->prev = get_tail(r->head);
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   249
			} else {
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   250
				r->prev->next = exec;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   251
				r->prev = get_tail(exec);
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   252
			}
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   253
		}
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   254
	}
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   255
	return (0);
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   256
}
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   257
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
static execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
userprof(const char *username, const char *type, const char *id,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
    int search_flag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	char		pwdb[NSS_BUFLEN_PASSWD];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
	struct passwd	pwd;
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   266
	call		call;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   267
	result		result;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	 * Check if specified username is valid user
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	if (getpwnam_r(username, &pwd, pwdb, sizeof (pwdb)) == NULL) {
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   273
		return (NULL);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   276
	result.head = result.prev = NULL;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   277
	call.type = type;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   278
	call.id = id;
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   279
	call.sflag = search_flag;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
12273
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   281
	(void) _enum_profs(username, findexecattr, &call, &result);
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   282
63678502e95e PSARC 2009/377 In-kernel pfexec implementation.
Casper H.S. Dik <Casper.Dik@Sun.COM>
parents: 10020
diff changeset
   283
	return (result.head);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
static execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
get_tail(execattr_t *exec)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
{
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   290
	execattr_t *i_exec = NULL;
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   291
	execattr_t *j_exec = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	if (exec != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
		if (exec->next == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
			j_exec = exec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
		} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
			for (i_exec = exec->next; i_exec != NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
			    i_exec = i_exec->next) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
				j_exec = i_exec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
			}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	return (j_exec);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
static execattr_t *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
execstr2attr(execstr_t *es)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
	execattr_t	*newexec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	if (es == NULL) {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   314
		return (NULL);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	}
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   316
	if ((newexec = malloc(sizeof (execattr_t))) == NULL) {
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   317
		return (NULL);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	newexec->name = _do_unescape(es->name);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	newexec->policy = _do_unescape(es->policy);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
	newexec->type = _do_unescape(es->type);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	newexec->res1 =  _do_unescape(es->res1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	newexec->res2 = _do_unescape(es->res2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	newexec->id = _do_unescape(es->id);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	newexec->attr = _str2kva(es->attr, KV_ASSIGN, KV_DELIMITER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	if (es->next) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
		newexec->next = execstr2attr((execstr_t *)(es->next));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
	} else {
6059
6f4d284e50d9 PSARC/2008/034 Defining Workstation Owner Infrastructure
gww
parents: 2830
diff changeset
   330
		newexec->next = NULL;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	return (newexec);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
#ifdef DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
print_execattr(execattr_t *exec)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	extern void print_kva(kva_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
	char *empty = "empty";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	if (exec != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
		printf("name=%s\n", exec->name ? exec->name : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
		printf("policy=%s\n", exec->policy ? exec->policy : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
		printf("type=%s\n", exec->type ? exec->type : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
		printf("res1=%s\n", exec->res1 ? exec->res1 : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
		printf("res2=%s\n", exec->res2 ? exec->res2 : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
		printf("id=%s\n", exec->id ? exec->id : empty);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
		printf("attr=\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
		print_kva(exec->attr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
		fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
		if (exec->next) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
			print_execattr(exec->next);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
		printf("NULL\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
#endif  /* DEBUG */