1b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
2b89a8333Snatalie li - Sun Microsystems - Irvine United States  * CDDL HEADER START
3b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
4b89a8333Snatalie li - Sun Microsystems - Irvine United States  * The contents of this file are subject to the terms of the
5b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Common Development and Distribution License (the "License").
6b89a8333Snatalie li - Sun Microsystems - Irvine United States  * You may not use this file except in compliance with the License.
7b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
8b89a8333Snatalie li - Sun Microsystems - Irvine United States  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9b89a8333Snatalie li - Sun Microsystems - Irvine United States  * or http://www.opensolaris.org/os/licensing.
10b89a8333Snatalie li - Sun Microsystems - Irvine United States  * See the License for the specific language governing permissions
11b89a8333Snatalie li - Sun Microsystems - Irvine United States  * and limitations under the License.
12b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
13b89a8333Snatalie li - Sun Microsystems - Irvine United States  * When distributing Covered Code, include this CDDL HEADER in each
14b89a8333Snatalie li - Sun Microsystems - Irvine United States  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15b89a8333Snatalie li - Sun Microsystems - Irvine United States  * If applicable, add the following below this CDDL HEADER, with the
16b89a8333Snatalie li - Sun Microsystems - Irvine United States  * fields enclosed by brackets "[]" replaced with your own identifying
17b89a8333Snatalie li - Sun Microsystems - Irvine United States  * information: Portions Copyright [yyyy] [name of copyright owner]
18b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
19b89a8333Snatalie li - Sun Microsystems - Irvine United States  * CDDL HEADER END
20b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
21b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
22b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Use is subject to license terms.
24b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
25b89a8333Snatalie li - Sun Microsystems - Irvine United States 
26b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
27b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Security database interface.
28b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
29b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <unistd.h>
30b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <strings.h>
31b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <pwd.h>
32b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <grp.h>
33b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <time.h>
34b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <syslog.h>
35b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <assert.h>
36b89a8333Snatalie li - Sun Microsystems - Irvine United States 
37b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <smbsrv/libsmb.h>
38b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <smbsrv/libmlsvc.h>
39b89a8333Snatalie li - Sun Microsystems - Irvine United States 
40b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <smbsrv/smbinfo.h>
41b89a8333Snatalie li - Sun Microsystems - Irvine United States #include <smbsrv/smb_token.h>
42*8d7e4166Sjose borrego #include <lsalib.h>
43b89a8333Snatalie li - Sun Microsystems - Irvine United States 
44b89a8333Snatalie li - Sun Microsystems - Irvine United States extern uint32_t netlogon_logon(netr_client_t *clnt, smb_userinfo_t *uinfo);
45b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t smb_logon_domain(netr_client_t *clnt, smb_userinfo_t *uinfo);
46b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t smb_logon_local(netr_client_t *clnt, smb_userinfo_t *uinfo);
47b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t smb_logon_none(netr_client_t *clnt, smb_userinfo_t *uinfo);
48b89a8333Snatalie li - Sun Microsystems - Irvine United States 
49b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t smb_setup_luinfo(smb_userinfo_t *, netr_client_t *, uid_t);
50b89a8333Snatalie li - Sun Microsystems - Irvine United States 
51b89a8333Snatalie li - Sun Microsystems - Irvine United States static int smb_token_is_member(smb_token_t *token, smb_sid_t *sid);
52b89a8333Snatalie li - Sun Microsystems - Irvine United States static int smb_token_is_valid(smb_token_t *token);
53b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_win_grps_t *smb_token_create_wingrps(smb_userinfo_t *user_info);
54b89a8333Snatalie li - Sun Microsystems - Irvine United States 
55b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_posix_grps_t *smb_token_create_pxgrps(uid_t uid);
56b89a8333Snatalie li - Sun Microsystems - Irvine United States 
57b89a8333Snatalie li - Sun Microsystems - Irvine United States /* Consolidation private function from Network Repository */
58b89a8333Snatalie li - Sun Microsystems - Irvine United States extern int _getgroupsbymember(const char *, gid_t[], int, int);
59b89a8333Snatalie li - Sun Microsystems - Irvine United States 
60b89a8333Snatalie li - Sun Microsystems - Irvine United States static idmap_stat
61b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_idmap(smb_token_t *token, smb_idmap_batch_t *sib)
62b89a8333Snatalie li - Sun Microsystems - Irvine United States {
63b89a8333Snatalie li - Sun Microsystems - Irvine United States 	idmap_stat stat;
64b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_idmap_t *sim;
65b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_id_t *id;
66b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int i;
67b89a8333Snatalie li - Sun Microsystems - Irvine United States 
68b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (!token || !sib)
69b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (IDMAP_ERR_ARG);
70b89a8333Snatalie li - Sun Microsystems - Irvine United States 
71b89a8333Snatalie li - Sun Microsystems - Irvine United States 	sim = sib->sib_maps;
72b89a8333Snatalie li - Sun Microsystems - Irvine United States 
73b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_flags & SMB_ATF_ANON) {
74b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_user->i_id = UID_NOBODY;
75b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_owner->i_id = UID_NOBODY;
76b89a8333Snatalie li - Sun Microsystems - Irvine United States 	} else {
77b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* User SID */
78b89a8333Snatalie li - Sun Microsystems - Irvine United States 		id = token->tkn_user;
79b89a8333Snatalie li - Sun Microsystems - Irvine United States 		sim->sim_id = &id->i_id;
80b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_idmap_batch_getid(sib->sib_idmaph, sim++,
81b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    id->i_sidattr.sid, SMB_IDMAP_USER);
82b89a8333Snatalie li - Sun Microsystems - Irvine United States 
83b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat != IDMAP_SUCCESS)
84b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (stat);
85b89a8333Snatalie li - Sun Microsystems - Irvine United States 
86b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* Owner SID */
87b89a8333Snatalie li - Sun Microsystems - Irvine United States 		id = token->tkn_owner;
88b89a8333Snatalie li - Sun Microsystems - Irvine United States 		sim->sim_id = &id->i_id;
89b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_idmap_batch_getid(sib->sib_idmaph, sim++,
90b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    id->i_sidattr.sid, SMB_IDMAP_USER);
91b89a8333Snatalie li - Sun Microsystems - Irvine United States 
92b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat != IDMAP_SUCCESS)
93b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (stat);
94b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
95b89a8333Snatalie li - Sun Microsystems - Irvine United States 
96b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Primary Group SID */
97b89a8333Snatalie li - Sun Microsystems - Irvine United States 	id = token->tkn_primary_grp;
98b89a8333Snatalie li - Sun Microsystems - Irvine United States 	sim->sim_id = &id->i_id;
99b89a8333Snatalie li - Sun Microsystems - Irvine United States 	stat = smb_idmap_batch_getid(sib->sib_idmaph, sim++,
100b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    id->i_sidattr.sid, SMB_IDMAP_GROUP);
101b89a8333Snatalie li - Sun Microsystems - Irvine United States 
102b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (stat != IDMAP_SUCCESS)
103b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (stat);
104b89a8333Snatalie li - Sun Microsystems - Irvine United States 
105b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Other Windows Group SIDs */
106b89a8333Snatalie li - Sun Microsystems - Irvine United States 	for (i = 0; i < token->tkn_win_grps->wg_count; i++, sim++) {
107b89a8333Snatalie li - Sun Microsystems - Irvine United States 		id = &token->tkn_win_grps->wg_groups[i];
108b89a8333Snatalie li - Sun Microsystems - Irvine United States 		sim->sim_id = &id->i_id;
109b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_idmap_batch_getid(sib->sib_idmaph, sim,
110b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    id->i_sidattr.sid, SMB_IDMAP_GROUP);
111b89a8333Snatalie li - Sun Microsystems - Irvine United States 
112b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat != IDMAP_SUCCESS)
113b89a8333Snatalie li - Sun Microsystems - Irvine United States 			break;
114b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
115b89a8333Snatalie li - Sun Microsystems - Irvine United States 
116b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (stat);
117b89a8333Snatalie li - Sun Microsystems - Irvine United States }
118b89a8333Snatalie li - Sun Microsystems - Irvine United States 
119b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
120b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_sids2ids
121b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
122b89a8333Snatalie li - Sun Microsystems - Irvine United States  * This will map all the SIDs of the access token to UIDs/GIDs.
123b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
124b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Returns 0 upon success.  Otherwise, returns -1.
125b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
126b89a8333Snatalie li - Sun Microsystems - Irvine United States static int
127b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_sids2ids(smb_token_t *token)
128b89a8333Snatalie li - Sun Microsystems - Irvine United States {
129b89a8333Snatalie li - Sun Microsystems - Irvine United States 	idmap_stat stat;
130b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int nmaps, retries = 0;
131b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_idmap_batch_t sib;
132b89a8333Snatalie li - Sun Microsystems - Irvine United States 
133b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/*
134b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * Number of idmap lookups: user SID, owner SID, primary group SID,
135b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * and all Windows group SIDs
136b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 */
137b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_flags & SMB_ATF_ANON)
138b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/*
139b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * Don't include user and owner SID, they're Anonymous
140b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 */
141b89a8333Snatalie li - Sun Microsystems - Irvine United States 		nmaps = 1;
142b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else
143b89a8333Snatalie li - Sun Microsystems - Irvine United States 		nmaps = 3;
144b89a8333Snatalie li - Sun Microsystems - Irvine United States 
145b89a8333Snatalie li - Sun Microsystems - Irvine United States 	nmaps += token->tkn_win_grps->wg_count;
146b89a8333Snatalie li - Sun Microsystems - Irvine United States 
147b89a8333Snatalie li - Sun Microsystems - Irvine United States 	do {
148b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_idmap_batch_create(&sib, nmaps, SMB_IDMAP_SID2ID);
149b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat != IDMAP_SUCCESS)
150b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (-1);
151b89a8333Snatalie li - Sun Microsystems - Irvine United States 
152b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_token_idmap(token, &sib);
153b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat != IDMAP_SUCCESS) {
154b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_idmap_batch_destroy(&sib);
155b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (-1);
156b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
157b89a8333Snatalie li - Sun Microsystems - Irvine United States 
158b89a8333Snatalie li - Sun Microsystems - Irvine United States 		stat = smb_idmap_batch_getmappings(&sib);
159b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_idmap_batch_destroy(&sib);
160b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (stat == IDMAP_ERR_RPC_HANDLE)
161b89a8333Snatalie li - Sun Microsystems - Irvine United States 			if (smb_idmap_restart() < 0)
162b89a8333Snatalie li - Sun Microsystems - Irvine United States 				break;
163b89a8333Snatalie li - Sun Microsystems - Irvine United States 	} while (stat == IDMAP_ERR_RPC_HANDLE && retries++ < 3);
164b89a8333Snatalie li - Sun Microsystems - Irvine United States 
165b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (stat == IDMAP_SUCCESS ? 0 : -1);
166b89a8333Snatalie li - Sun Microsystems - Irvine United States }
167b89a8333Snatalie li - Sun Microsystems - Irvine United States 
168b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
169b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_create_pxgrps
170b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
171b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Setup the POSIX group membership of the access token if the given UID is
172b89a8333Snatalie li - Sun Microsystems - Irvine United States  * a POSIX UID (non-ephemeral). Both the user's primary group and
173b89a8333Snatalie li - Sun Microsystems - Irvine United States  * supplementary groups will be added to the POSIX group array of the access
174b89a8333Snatalie li - Sun Microsystems - Irvine United States  * token.
175b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
176b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_posix_grps_t *
177b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create_pxgrps(uid_t uid)
178b89a8333Snatalie li - Sun Microsystems - Irvine United States {
179b89a8333Snatalie li - Sun Microsystems - Irvine United States 	struct passwd *pwd;
180b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_posix_grps_t *pgrps;
181b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int ngroups_max, num;
182b89a8333Snatalie li - Sun Microsystems - Irvine United States 	gid_t *gids;
183b89a8333Snatalie li - Sun Microsystems - Irvine United States 
184b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((ngroups_max = sysconf(_SC_NGROUPS_MAX)) < 0) {
185b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_ERR, "smb_logon: failed to get _SC_NGROUPS_MAX");
186b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
187b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
188b89a8333Snatalie li - Sun Microsystems - Irvine United States 
189b89a8333Snatalie li - Sun Microsystems - Irvine United States 	pwd = getpwuid(uid);
190b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (pwd == NULL) {
191b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps = malloc(sizeof (smb_posix_grps_t));
192b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (pgrps == NULL)
193b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (NULL);
194b89a8333Snatalie li - Sun Microsystems - Irvine United States 
195b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps->pg_ngrps = 0;
196b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (pgrps);
197b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
198b89a8333Snatalie li - Sun Microsystems - Irvine United States 
199b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (pwd->pw_name == NULL) {
200b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps = malloc(sizeof (smb_posix_grps_t));
201b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (pgrps == NULL)
202b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (NULL);
203b89a8333Snatalie li - Sun Microsystems - Irvine United States 
204b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps->pg_ngrps = 1;
205b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps->pg_grps[0] = pwd->pw_gid;
206b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (pgrps);
207b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
208b89a8333Snatalie li - Sun Microsystems - Irvine United States 
209b89a8333Snatalie li - Sun Microsystems - Irvine United States 	gids = (gid_t *)malloc(ngroups_max * sizeof (gid_t));
210b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (gids == NULL) {
211b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
212b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
213b89a8333Snatalie li - Sun Microsystems - Irvine United States 	bzero(gids, ngroups_max * sizeof (gid_t));
214b89a8333Snatalie li - Sun Microsystems - Irvine United States 
215b89a8333Snatalie li - Sun Microsystems - Irvine United States 	gids[0] = pwd->pw_gid;
216b89a8333Snatalie li - Sun Microsystems - Irvine United States 
217b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/*
218b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * Setup the groups starting at index 1 (the last arg)
219b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * of gids array.
220b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 */
221b89a8333Snatalie li - Sun Microsystems - Irvine United States 	num = _getgroupsbymember(pwd->pw_name, gids, ngroups_max, 1);
222b89a8333Snatalie li - Sun Microsystems - Irvine United States 
223b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (num == -1) {
224b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_ERR, "smb_logon: unable "
225b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    "to get user's supplementary groups");
226b89a8333Snatalie li - Sun Microsystems - Irvine United States 		num = 1;
227b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
228b89a8333Snatalie li - Sun Microsystems - Irvine United States 
229b89a8333Snatalie li - Sun Microsystems - Irvine United States 	pgrps = (smb_posix_grps_t *)malloc(SMB_POSIX_GRPS_SIZE(num));
230b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (pgrps) {
231b89a8333Snatalie li - Sun Microsystems - Irvine United States 		pgrps->pg_ngrps = num;
232b89a8333Snatalie li - Sun Microsystems - Irvine United States 		bcopy(gids, pgrps->pg_grps, num * sizeof (gid_t));
233b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
234b89a8333Snatalie li - Sun Microsystems - Irvine United States 
235b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(gids);
236b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (pgrps);
237b89a8333Snatalie li - Sun Microsystems - Irvine United States }
238b89a8333Snatalie li - Sun Microsystems - Irvine United States 
239b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
240b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_destroy
241b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
242b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Release all of the memory associated with a token structure. Ensure
243b89a8333Snatalie li - Sun Microsystems - Irvine United States  * that the token has been unlinked before calling.
244b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
245b89a8333Snatalie li - Sun Microsystems - Irvine United States void
246b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_destroy(smb_token_t *token)
247b89a8333Snatalie li - Sun Microsystems - Irvine United States {
248b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_win_grps_t *groups;
249b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int i;
250b89a8333Snatalie li - Sun Microsystems - Irvine United States 
251b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token == NULL)
252b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return;
253b89a8333Snatalie li - Sun Microsystems - Irvine United States 
254b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_user) {
255b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_user->i_sidattr.sid);
256b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_user);
257b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
258b89a8333Snatalie li - Sun Microsystems - Irvine United States 
259b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_owner) {
260b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_owner->i_sidattr.sid);
261b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_owner);
262b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
263b89a8333Snatalie li - Sun Microsystems - Irvine United States 
264b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_primary_grp) {
265b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_primary_grp->i_sidattr.sid);
266b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(token->tkn_primary_grp);
267b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
268b89a8333Snatalie li - Sun Microsystems - Irvine United States 
269b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((groups = token->tkn_win_grps) != NULL) {
270b89a8333Snatalie li - Sun Microsystems - Irvine United States 		for (i = 0; i < groups->wg_count; ++i)
271b89a8333Snatalie li - Sun Microsystems - Irvine United States 			free(groups->wg_groups[i].i_sidattr.sid);
272b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(groups);
273b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
274b89a8333Snatalie li - Sun Microsystems - Irvine United States 
275b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_privset_free(token->tkn_privileges);
276b89a8333Snatalie li - Sun Microsystems - Irvine United States 
277b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(token->tkn_posix_grps);
278b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(token->tkn_account_name);
279b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(token->tkn_domain_name);
280b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(token->tkn_session_key);
281b89a8333Snatalie li - Sun Microsystems - Irvine United States 
282b89a8333Snatalie li - Sun Microsystems - Irvine United States 	free(token);
283b89a8333Snatalie li - Sun Microsystems - Irvine United States }
284b89a8333Snatalie li - Sun Microsystems - Irvine United States 
285b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_id_t *
286b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create_id(smb_sid_t *sid)
287b89a8333Snatalie li - Sun Microsystems - Irvine United States {
288b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_id_t *id;
289b89a8333Snatalie li - Sun Microsystems - Irvine United States 
290b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((id = malloc(sizeof (smb_id_t))) == NULL)
291b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
292b89a8333Snatalie li - Sun Microsystems - Irvine United States 
293b89a8333Snatalie li - Sun Microsystems - Irvine United States 	id->i_id = (uid_t)-1;
294b89a8333Snatalie li - Sun Microsystems - Irvine United States 	id->i_sidattr.attrs = 7;
295b89a8333Snatalie li - Sun Microsystems - Irvine United States 	id->i_sidattr.sid = smb_sid_dup(sid);
296b89a8333Snatalie li - Sun Microsystems - Irvine United States 
297b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (id->i_sidattr.sid == NULL) {
298b89a8333Snatalie li - Sun Microsystems - Irvine United States 		free(id);
299b89a8333Snatalie li - Sun Microsystems - Irvine United States 		id = NULL;
300b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
301b89a8333Snatalie li - Sun Microsystems - Irvine United States 
302b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (id);
303b89a8333Snatalie li - Sun Microsystems - Irvine United States }
304b89a8333Snatalie li - Sun Microsystems - Irvine United States 
305b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
306b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Token owner should be set to local Administrators group
307b89a8333Snatalie li - Sun Microsystems - Irvine United States  * in two cases:
308b89a8333Snatalie li - Sun Microsystems - Irvine United States  *   1. The logged on user is a member of Domain Admins group
309b89a8333Snatalie li - Sun Microsystems - Irvine United States  *   2. he/she is a member of local Administrators group
310b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
311b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_id_t *
312b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create_owner(smb_userinfo_t *user_info)
313b89a8333Snatalie li - Sun Microsystems - Irvine United States {
314b89a8333Snatalie li - Sun Microsystems - Irvine United States #ifdef SMB_SUPPORT_GROUP_OWNER
315b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_t *owner_sid;
316b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_wka_t *wka;
317b89a8333Snatalie li - Sun Microsystems - Irvine United States 
318b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->flags & SMB_UINFO_FLAG_ADMIN) {
319b89a8333Snatalie li - Sun Microsystems - Irvine United States 		wka = smb_wka_lookup("Administrators");
320b89a8333Snatalie li - Sun Microsystems - Irvine United States 		assert(wka);
321b89a8333Snatalie li - Sun Microsystems - Irvine United States 		owner_sid = wka->wka_binsid;
322b89a8333Snatalie li - Sun Microsystems - Irvine United States 	} else {
323b89a8333Snatalie li - Sun Microsystems - Irvine United States 		owner_sid = user_info->user_sid;
324b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
325b89a8333Snatalie li - Sun Microsystems - Irvine United States 
326b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (smb_token_create_id(owner_sid));
327b89a8333Snatalie li - Sun Microsystems - Irvine United States #endif
328b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (smb_token_create_id(user_info->user_sid));
329b89a8333Snatalie li - Sun Microsystems - Irvine United States }
330b89a8333Snatalie li - Sun Microsystems - Irvine United States 
331b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_privset_t *
332b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create_privs(smb_userinfo_t *user_info)
333b89a8333Snatalie li - Sun Microsystems - Irvine United States {
334b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_privset_t *privs;
335b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_giter_t gi;
336b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_group_t grp;
337b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int rc;
338b89a8333Snatalie li - Sun Microsystems - Irvine United States 
339b89a8333Snatalie li - Sun Microsystems - Irvine United States 	privs = smb_privset_new();
340b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (privs == NULL)
341b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
342b89a8333Snatalie li - Sun Microsystems - Irvine United States 
343b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (smb_lgrp_iteropen(&gi) != SMB_LGRP_SUCCESS) {
344b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_privset_free(privs);
345b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
346b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
347b89a8333Snatalie li - Sun Microsystems - Irvine United States 
348b89a8333Snatalie li - Sun Microsystems - Irvine United States 	while (smb_lgrp_iterate(&gi, &grp) == SMB_LGRP_SUCCESS) {
349b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (smb_lgrp_is_member(&grp, user_info->user_sid)) {
350b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_privset_merge(privs, grp.sg_privs);
351b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
352b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_lgrp_free(&grp);
353b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
354b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_lgrp_iterclose(&gi);
355b89a8333Snatalie li - Sun Microsystems - Irvine United States 
356b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->flags & SMB_UINFO_FLAG_ADMIN) {
357b89a8333Snatalie li - Sun Microsystems - Irvine United States 		rc = smb_lgrp_getbyname("Administrators", &grp);
358b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (rc == SMB_LGRP_SUCCESS) {
359b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_privset_merge(privs, grp.sg_privs);
360b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_lgrp_free(&grp);
361b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
362b89a8333Snatalie li - Sun Microsystems - Irvine United States 
363b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/*
364b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * This privilege is required to view/edit SACL
365b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 */
366b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_privset_enable(privs, SE_SECURITY_LUID);
367b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
368b89a8333Snatalie li - Sun Microsystems - Irvine United States 
369b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (privs);
370b89a8333Snatalie li - Sun Microsystems - Irvine United States }
371b89a8333Snatalie li - Sun Microsystems - Irvine United States 
372b89a8333Snatalie li - Sun Microsystems - Irvine United States static void
373b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_set_flags(smb_token_t *token, smb_userinfo_t *user_info)
374b89a8333Snatalie li - Sun Microsystems - Irvine United States {
375b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_wka_t *wka;
376b89a8333Snatalie li - Sun Microsystems - Irvine United States 
377b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->flags & SMB_UINFO_FLAG_ANON) {
378b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_flags |= SMB_ATF_ANON;
379b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return;
380b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
381b89a8333Snatalie li - Sun Microsystems - Irvine United States 
382b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->rid == DOMAIN_USER_RID_GUEST) {
383b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_flags |= SMB_ATF_GUEST;
384b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return;
385b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
386b89a8333Snatalie li - Sun Microsystems - Irvine United States 
387b89a8333Snatalie li - Sun Microsystems - Irvine United States 	wka = smb_wka_lookup("Administrators");
388b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (wka->wka_binsid && smb_token_is_member(token, wka->wka_binsid))
389b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_flags |= SMB_ATF_ADMIN;
390b89a8333Snatalie li - Sun Microsystems - Irvine United States 
391b89a8333Snatalie li - Sun Microsystems - Irvine United States 	wka = smb_wka_lookup("Power Users");
392b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (wka->wka_binsid && smb_token_is_member(token, wka->wka_binsid))
393b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_flags |= SMB_ATF_POWERUSER;
394b89a8333Snatalie li - Sun Microsystems - Irvine United States 
395b89a8333Snatalie li - Sun Microsystems - Irvine United States 	wka = smb_wka_lookup("Backup Operators");
396b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (wka->wka_binsid && smb_token_is_member(token, wka->wka_binsid))
397b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_flags |= SMB_ATF_BACKUPOP;
398b89a8333Snatalie li - Sun Microsystems - Irvine United States 
399b89a8333Snatalie li - Sun Microsystems - Irvine United States }
400b89a8333Snatalie li - Sun Microsystems - Irvine United States 
401b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
402b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_create
403b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
404b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Build an access token based on the given user information (user_info).
405b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
406b89a8333Snatalie li - Sun Microsystems - Irvine United States  * If everything is successful, a pointer to an access token is
407b89a8333Snatalie li - Sun Microsystems - Irvine United States  * returned. Otherwise a null pointer is returned.
408b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
409b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_token_t *
410b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create(smb_userinfo_t *user_info)
411b89a8333Snatalie li - Sun Microsystems - Irvine United States {
412b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_token_t *token;
413b89a8333Snatalie li - Sun Microsystems - Irvine United States 
414b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->sid_name_use != SidTypeUser)
415b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
416b89a8333Snatalie li - Sun Microsystems - Irvine United States 
417b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token = (smb_token_t *)malloc(sizeof (smb_token_t));
418b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token == NULL) {
419b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_ERR, "smb_token_create: resource shortage");
420b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
421b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
422b89a8333Snatalie li - Sun Microsystems - Irvine United States 	bzero(token, sizeof (smb_token_t));
423b89a8333Snatalie li - Sun Microsystems - Irvine United States 
424b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* User */
425b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_user = smb_token_create_id(user_info->user_sid);
426b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_user == NULL) {
427b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
428b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
429b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
430b89a8333Snatalie li - Sun Microsystems - Irvine United States 
431b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Owner */
432b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_owner = smb_token_create_owner(user_info);
433b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_owner == NULL) {
434b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
435b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
436b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
437b89a8333Snatalie li - Sun Microsystems - Irvine United States 
438b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Primary Group */
439b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_primary_grp = smb_token_create_id(user_info->pgrp_sid);
440b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_primary_grp == NULL) {
441b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
442b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
443b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
444b89a8333Snatalie li - Sun Microsystems - Irvine United States 
445b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Privileges */
446b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_privileges = smb_token_create_privs(user_info);
447b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_privileges == NULL) {
448b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
449b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
450b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
451b89a8333Snatalie li - Sun Microsystems - Irvine United States 
452b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Windows Groups */
453b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_win_grps = smb_token_create_wingrps(user_info);
454b89a8333Snatalie li - Sun Microsystems - Irvine United States 
455b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_token_set_flags(token, user_info);
456b89a8333Snatalie li - Sun Microsystems - Irvine United States 
457b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/*
458b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * IMPORTANT
459b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 *
460b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * This function has to be called after all the SIDs in the
461b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * token are setup (i.e. user, owner, primary and supplementary
462b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 * groups) and before setting up Solaris groups.
463b89a8333Snatalie li - Sun Microsystems - Irvine United States 	 */
464b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (smb_token_sids2ids(token) != 0) {
465b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_ERR, "%s\\%s: idmap failed",
466b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    (user_info->domain_name) ? user_info->domain_name : "",
467b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    (user_info->name) ? user_info->name : "");
468b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
469b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
470b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
471b89a8333Snatalie li - Sun Microsystems - Irvine United States 
472b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Solaris Groups */
473b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_posix_grps = smb_token_create_pxgrps(token->tkn_user->i_id);
474b89a8333Snatalie li - Sun Microsystems - Irvine United States 
475b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info->session_key) {
476b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token->tkn_session_key = malloc(sizeof (smb_session_key_t));
477b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (token->tkn_session_key == NULL) {
478b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_token_destroy(token);
479b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (NULL);
480b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
481b89a8333Snatalie li - Sun Microsystems - Irvine United States 
482b89a8333Snatalie li - Sun Microsystems - Irvine United States 		(void) memcpy(token->tkn_session_key,
483b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    user_info->session_key, sizeof (smb_session_key_t));
484b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
485b89a8333Snatalie li - Sun Microsystems - Irvine United States 
486b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_account_name = strdup(user_info->name);
487b89a8333Snatalie li - Sun Microsystems - Irvine United States 	token->tkn_domain_name = strdup(user_info->domain_name);
488b89a8333Snatalie li - Sun Microsystems - Irvine United States 
489b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (!smb_token_is_valid(token)) {
490b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_token_destroy(token);
491b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
492b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
493b89a8333Snatalie li - Sun Microsystems - Irvine United States 
494b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (token);
495b89a8333Snatalie li - Sun Microsystems - Irvine United States }
496b89a8333Snatalie li - Sun Microsystems - Irvine United States 
497b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
498b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_create_wingrps
499b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
500b89a8333Snatalie li - Sun Microsystems - Irvine United States  * This private function supports smb_token_create() by mapping the group
501b89a8333Snatalie li - Sun Microsystems - Irvine United States  * information in the user_info structure to the form required in an
502b89a8333Snatalie li - Sun Microsystems - Irvine United States  * access token. The main difference is that the user_info contains
503b89a8333Snatalie li - Sun Microsystems - Irvine United States  * RIDs while and access token contains full SIDs. Memory allocated
504b89a8333Snatalie li - Sun Microsystems - Irvine United States  * here will be deallocated as part of smb_token_destroy().
505b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
506b89a8333Snatalie li - Sun Microsystems - Irvine United States  * If everything is successful, a pointer to a smb_win_grps_t
507b89a8333Snatalie li - Sun Microsystems - Irvine United States  * structure is returned. Otherwise a null pointer is returned.
508b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
509b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_win_grps_t *
510b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_create_wingrps(smb_userinfo_t *user_info)
511b89a8333Snatalie li - Sun Microsystems - Irvine United States {
512b89a8333Snatalie li - Sun Microsystems - Irvine United States 	static char *wk_grps[] =
513b89a8333Snatalie li - Sun Microsystems - Irvine United States 		{"Authenticated Users", "NETWORK", "Administrators"};
514b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_win_grps_t *tkn_grps;
515b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_attrs_t *dlg_grps;
516b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_rid_attrs_t *g_grps;
517b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_attrs_t *grp;
518b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_t *builtin_sid;
519b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_giter_t gi;
520b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_group_t lgrp;
521b89a8333Snatalie li - Sun Microsystems - Irvine United States 	uint32_t n_gg, n_lg, n_dlg, n_wg;
522b89a8333Snatalie li - Sun Microsystems - Irvine United States 	uint32_t i, j;
523b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int size, count;
524b89a8333Snatalie li - Sun Microsystems - Irvine United States 
525b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (user_info == NULL)
526b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
527b89a8333Snatalie li - Sun Microsystems - Irvine United States 
528b89a8333Snatalie li - Sun Microsystems - Irvine United States 	n_gg = user_info->n_groups;		/* Global Groups */
529b89a8333Snatalie li - Sun Microsystems - Irvine United States 	n_dlg = user_info->n_other_grps;	/* Domain Local Groups */
530b89a8333Snatalie li - Sun Microsystems - Irvine United States 
531b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Local Groups */
532b89a8333Snatalie li - Sun Microsystems - Irvine United States 	(void) smb_lgrp_numbymember(user_info->user_sid, (int *)&n_lg);
533b89a8333Snatalie li - Sun Microsystems - Irvine United States 
534b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Well known Groups */
535b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((user_info->flags & SMB_UINFO_FLAG_ADMIN) == SMB_UINFO_FLAG_DADMIN)
536b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* if user is a domain admin but not a local admin */
537b89a8333Snatalie li - Sun Microsystems - Irvine United States 		n_wg = 3;
538b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else if (user_info->flags & SMB_UINFO_FLAG_ANON)
539b89a8333Snatalie li - Sun Microsystems - Irvine United States 		n_wg = 0;
540b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else
541b89a8333Snatalie li - Sun Microsystems - Irvine United States 		n_wg = 2;
542b89a8333Snatalie li - Sun Microsystems - Irvine United States 
543b89a8333Snatalie li - Sun Microsystems - Irvine United States 	count = n_gg + n_dlg + n_lg + n_wg;
544b89a8333Snatalie li - Sun Microsystems - Irvine United States 	size = sizeof (smb_win_grps_t) + (count * sizeof (smb_id_t));
545b89a8333Snatalie li - Sun Microsystems - Irvine United States 
546b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((tkn_grps = malloc(size)) == NULL)
547b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
548b89a8333Snatalie li - Sun Microsystems - Irvine United States 	bzero(tkn_grps, size);
549b89a8333Snatalie li - Sun Microsystems - Irvine United States 
550b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Add global groups */
551b89a8333Snatalie li - Sun Microsystems - Irvine United States 	g_grps = user_info->groups;
552b89a8333Snatalie li - Sun Microsystems - Irvine United States 	for (i = 0; i < n_gg; i++) {
553b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp = &tkn_grps->wg_groups[i].i_sidattr;
554b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp->sid = smb_sid_splice(user_info->domain_sid, g_grps[i].rid);
555b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (grp->sid == NULL)
556b89a8333Snatalie li - Sun Microsystems - Irvine United States 			break;
557b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp->attrs = g_grps[i].attributes;
558b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
559b89a8333Snatalie li - Sun Microsystems - Irvine United States 
560b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (n_gg == 0) {
561b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/*
562b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * if there's no global group should add the
563b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * primary group.
564b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 */
565b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp = &tkn_grps->wg_groups[i].i_sidattr;
566b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp->sid = smb_sid_dup(user_info->pgrp_sid);
567b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (grp->sid != NULL) {
568b89a8333Snatalie li - Sun Microsystems - Irvine United States 			grp->attrs = 0x7;
569b89a8333Snatalie li - Sun Microsystems - Irvine United States 			i++;
570b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
571b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
572b89a8333Snatalie li - Sun Microsystems - Irvine United States 
573b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Add domain local groups */
574b89a8333Snatalie li - Sun Microsystems - Irvine United States 	dlg_grps = user_info->other_grps;
575b89a8333Snatalie li - Sun Microsystems - Irvine United States 	for (j = 0; j < n_dlg; j++, i++) {
576b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp = &tkn_grps->wg_groups[i].i_sidattr;
577b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp->sid = smb_sid_dup(dlg_grps[j].sid);
578b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (grp->sid == NULL)
579b89a8333Snatalie li - Sun Microsystems - Irvine United States 			break;
580b89a8333Snatalie li - Sun Microsystems - Irvine United States 		grp->attrs = dlg_grps[j].attrs;
581b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
582b89a8333Snatalie li - Sun Microsystems - Irvine United States 
583b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Add local groups */
584b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (n_lg && (smb_lgrp_iteropen(&gi) == SMB_LGRP_SUCCESS)) {
585b89a8333Snatalie li - Sun Microsystems - Irvine United States 		j = 0;
586b89a8333Snatalie li - Sun Microsystems - Irvine United States 		while (smb_lgrp_iterate(&gi, &lgrp) == SMB_LGRP_SUCCESS) {
587b89a8333Snatalie li - Sun Microsystems - Irvine United States 			if ((j < n_lg) &&
588b89a8333Snatalie li - Sun Microsystems - Irvine United States 			    smb_lgrp_is_member(&lgrp, user_info->user_sid)) {
589b89a8333Snatalie li - Sun Microsystems - Irvine United States 				grp = &tkn_grps->wg_groups[i].i_sidattr;
590b89a8333Snatalie li - Sun Microsystems - Irvine United States 				grp->sid = smb_sid_dup(lgrp.sg_id.gs_sid);
591b89a8333Snatalie li - Sun Microsystems - Irvine United States 				if (grp->sid == NULL) {
592b89a8333Snatalie li - Sun Microsystems - Irvine United States 					smb_lgrp_free(&lgrp);
593b89a8333Snatalie li - Sun Microsystems - Irvine United States 					break;
594b89a8333Snatalie li - Sun Microsystems - Irvine United States 				}
595b89a8333Snatalie li - Sun Microsystems - Irvine United States 				grp->attrs = lgrp.sg_attr;
596b89a8333Snatalie li - Sun Microsystems - Irvine United States 				i++;
597b89a8333Snatalie li - Sun Microsystems - Irvine United States 				j++;
598b89a8333Snatalie li - Sun Microsystems - Irvine United States 			}
599b89a8333Snatalie li - Sun Microsystems - Irvine United States 			smb_lgrp_free(&lgrp);
600b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
601b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_lgrp_iterclose(&gi);
602b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
603b89a8333Snatalie li - Sun Microsystems - Irvine United States 
604b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Add well known groups */
605b89a8333Snatalie li - Sun Microsystems - Irvine United States 	for (j = 0; j < n_wg; j++, i++) {
606b89a8333Snatalie li - Sun Microsystems - Irvine United States 		builtin_sid = smb_wka_lookup_name(wk_grps[j], NULL);
607b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (builtin_sid == NULL)
608b89a8333Snatalie li - Sun Microsystems - Irvine United States 			break;
609b89a8333Snatalie li - Sun Microsystems - Irvine United States 		tkn_grps->wg_groups[i].i_sidattr.sid = builtin_sid;
610b89a8333Snatalie li - Sun Microsystems - Irvine United States 		tkn_grps->wg_groups[i].i_sidattr.attrs = 0x7;
611b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
612b89a8333Snatalie li - Sun Microsystems - Irvine United States 
613b89a8333Snatalie li - Sun Microsystems - Irvine United States 	tkn_grps->wg_count = i;
614b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (tkn_grps);
615b89a8333Snatalie li - Sun Microsystems - Irvine United States }
616b89a8333Snatalie li - Sun Microsystems - Irvine United States 
617b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
618b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_logon
619b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
620b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Performs user authentication and creates a token if the
621b89a8333Snatalie li - Sun Microsystems - Irvine United States  * authentication is successful.
622b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
623b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Returns pointer to the created token.
624b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
625b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_t *
626b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_logon(netr_client_t *clnt)
627b89a8333Snatalie li - Sun Microsystems - Irvine United States {
628b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_token_t *token = NULL;
629b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_userinfo_t *uinfo;
630b89a8333Snatalie li - Sun Microsystems - Irvine United States 	uint32_t status;
631b89a8333Snatalie li - Sun Microsystems - Irvine United States 
632b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((uinfo = mlsvc_alloc_user_info()) == 0)
633b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
634b89a8333Snatalie li - Sun Microsystems - Irvine United States 
635b89a8333Snatalie li - Sun Microsystems - Irvine United States 	switch (clnt->flags) {
636b89a8333Snatalie li - Sun Microsystems - Irvine United States 	case NETR_CFLG_DOMAIN:
637b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* Pass through authentication with DC */
638b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = smb_logon_domain(clnt, uinfo);
639b89a8333Snatalie li - Sun Microsystems - Irvine United States 		break;
640b89a8333Snatalie li - Sun Microsystems - Irvine United States 
641b89a8333Snatalie li - Sun Microsystems - Irvine United States 	case NETR_CFLG_LOCAL:
642b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* Local authentication */
643b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = smb_logon_local(clnt, uinfo);
644b89a8333Snatalie li - Sun Microsystems - Irvine United States 		break;
645b89a8333Snatalie li - Sun Microsystems - Irvine United States 
646b89a8333Snatalie li - Sun Microsystems - Irvine United States 	case NETR_CFLG_ANON:
647b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/* Anonymous user; no authentication */
648b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = smb_logon_none(clnt, uinfo);
649b89a8333Snatalie li - Sun Microsystems - Irvine United States 		break;
650b89a8333Snatalie li - Sun Microsystems - Irvine United States 
651b89a8333Snatalie li - Sun Microsystems - Irvine United States 	default:
652b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = NT_STATUS_INVALID_PARAMETER;
653b89a8333Snatalie li - Sun Microsystems - Irvine United States 		break;
654b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
655b89a8333Snatalie li - Sun Microsystems - Irvine United States 
656b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (status == NT_STATUS_SUCCESS)
657b89a8333Snatalie li - Sun Microsystems - Irvine United States 		token = smb_token_create(uinfo);
658b89a8333Snatalie li - Sun Microsystems - Irvine United States 
659b89a8333Snatalie li - Sun Microsystems - Irvine United States 	mlsvc_free_user_info(uinfo);
660b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (token);
661b89a8333Snatalie li - Sun Microsystems - Irvine United States }
662b89a8333Snatalie li - Sun Microsystems - Irvine United States 
663b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
664b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_logon_domain
665b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
666b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Performs pass through authentication with PDC.
667b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
668b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t
669b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_logon_domain(netr_client_t *clnt, smb_userinfo_t *uinfo)
670b89a8333Snatalie li - Sun Microsystems - Irvine United States {
671b89a8333Snatalie li - Sun Microsystems - Irvine United States 	uint32_t status;
672b89a8333Snatalie li - Sun Microsystems - Irvine United States 
673b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((status = netlogon_logon(clnt, uinfo)) != 0) {
674b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (status == NT_STATUS_CANT_ACCESS_DOMAIN_INFO) {
675b89a8333Snatalie li - Sun Microsystems - Irvine United States 			if ((status = netlogon_logon(clnt, uinfo)) != 0) {
676b89a8333Snatalie li - Sun Microsystems - Irvine United States 				syslog(LOG_INFO, "SmbLogon[%s\\%s]: %s",
677b89a8333Snatalie li - Sun Microsystems - Irvine United States 				    clnt->domain, clnt->username,
678b89a8333Snatalie li - Sun Microsystems - Irvine United States 				    xlate_nt_status(status));
679b89a8333Snatalie li - Sun Microsystems - Irvine United States 				return (status);
680b89a8333Snatalie li - Sun Microsystems - Irvine United States 			}
681b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
682b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
683b89a8333Snatalie li - Sun Microsystems - Irvine United States 
684b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (status);
685b89a8333Snatalie li - Sun Microsystems - Irvine United States }
686b89a8333Snatalie li - Sun Microsystems - Irvine United States 
687b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
688b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_logon_local
689b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
690b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Check to see if connected user has an entry in the local
691b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smbpasswd database. If it has, tries both LM hash and NT
692b89a8333Snatalie li - Sun Microsystems - Irvine United States  * hash with user's password(s) to authenticate the user.
693b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
694b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t
695b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_logon_local(netr_client_t *clnt, smb_userinfo_t *uinfo)
696b89a8333Snatalie li - Sun Microsystems - Irvine United States {
697b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_passwd_t smbpw;
698b89a8333Snatalie li - Sun Microsystems - Irvine United States 	boolean_t lm_ok, nt_ok;
699b89a8333Snatalie li - Sun Microsystems - Irvine United States 	uint32_t status;
700b89a8333Snatalie li - Sun Microsystems - Irvine United States 
701b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (smb_pwd_getpasswd(clnt->username, &smbpw) == NULL) {
702b89a8333Snatalie li - Sun Microsystems - Irvine United States 		/*
703b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * If user doesn't have entry either in smbpasswd
704b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 * or passwd it's considered as an invalid user.
705b89a8333Snatalie li - Sun Microsystems - Irvine United States 		 */
706b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = NT_STATUS_NO_SUCH_USER;
707b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_NOTICE, "SmbLogon[%s\\%s]: %s",
708b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->domain, clnt->username,
709b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    xlate_nt_status(status));
710b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (status);
711b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
712b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (smbpw.pw_flags & SMB_PWF_DISABLE)
713b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_ACCOUNT_DISABLED);
714b89a8333Snatalie li - Sun Microsystems - Irvine United States 
715b89a8333Snatalie li - Sun Microsystems - Irvine United States 	nt_ok = lm_ok = B_FALSE;
716b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((smbpw.pw_flags & SMB_PWF_LM) &&
717b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (clnt->lm_password.lm_password_len != 0)) {
718b89a8333Snatalie li - Sun Microsystems - Irvine United States 		lm_ok = smb_auth_validate_lm(
719b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->challenge_key.challenge_key_val,
720b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->challenge_key.challenge_key_len,
721b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    &smbpw,
722b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->lm_password.lm_password_val,
723b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->lm_password.lm_password_len,
724b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->domain,
725b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->username);
726b89a8333Snatalie li - Sun Microsystems - Irvine United States 		uinfo->session_key = NULL;
727b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
728b89a8333Snatalie li - Sun Microsystems - Irvine United States 
729b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (!lm_ok && (clnt->nt_password.nt_password_len != 0)) {
730b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if ((uinfo->session_key =
731b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    malloc(SMBAUTH_SESSION_KEY_SZ)) == NULL)
732b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (NT_STATUS_NO_MEMORY);
733b89a8333Snatalie li - Sun Microsystems - Irvine United States 		nt_ok = smb_auth_validate_nt(
734b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->challenge_key.challenge_key_val,
735b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->challenge_key.challenge_key_len,
736b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    &smbpw,
737b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->nt_password.nt_password_val,
738b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->nt_password.nt_password_len,
739b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->domain,
740b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->username,
741b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    (uchar_t *)uinfo->session_key);
742b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
743b89a8333Snatalie li - Sun Microsystems - Irvine United States 
744b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (!nt_ok && !lm_ok) {
745b89a8333Snatalie li - Sun Microsystems - Irvine United States 		status = NT_STATUS_WRONG_PASSWORD;
746b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_NOTICE, "SmbLogon[%s\\%s]: %s",
747b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    clnt->domain, clnt->username,
748b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    xlate_nt_status(status));
749b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (status);
750b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
751b89a8333Snatalie li - Sun Microsystems - Irvine United States 
752b89a8333Snatalie li - Sun Microsystems - Irvine United States 	status = smb_setup_luinfo(uinfo, clnt, smbpw.pw_uid);
753b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (status);
754b89a8333Snatalie li - Sun Microsystems - Irvine United States }
755b89a8333Snatalie li - Sun Microsystems - Irvine United States 
756b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
757b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_logon_none
758b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
759b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Setup user information for anonymous user.
760b89a8333Snatalie li - Sun Microsystems - Irvine United States  * No authentication is required.
761b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
762b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t
763b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_logon_none(netr_client_t *clnt, smb_userinfo_t *uinfo)
764b89a8333Snatalie li - Sun Microsystems - Irvine United States {
765b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (smb_setup_luinfo(uinfo, clnt, (uid_t)-1));
766b89a8333Snatalie li - Sun Microsystems - Irvine United States }
767b89a8333Snatalie li - Sun Microsystems - Irvine United States 
768b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
769b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_setup_luinfo
770b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
771b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Setup local user information based on the client information and
772b89a8333Snatalie li - Sun Microsystems - Irvine United States  * user's record in the local password file.
773b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
774b89a8333Snatalie li - Sun Microsystems - Irvine United States static uint32_t
775b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_setup_luinfo(smb_userinfo_t *lui, netr_client_t *clnt, uid_t uid)
776b89a8333Snatalie li - Sun Microsystems - Irvine United States {
777b89a8333Snatalie li - Sun Microsystems - Irvine United States 	idmap_stat stat;
778b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_idmap_batch_t sib;
779b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_idmap_t *umap, *gmap;
780b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_group_t grp;
781b89a8333Snatalie li - Sun Microsystems - Irvine United States 	struct passwd pw;
782b89a8333Snatalie li - Sun Microsystems - Irvine United States 	char pwbuf[1024];
783b89a8333Snatalie li - Sun Microsystems - Irvine United States 	char nbname[NETBIOS_NAME_SZ];
784b89a8333Snatalie li - Sun Microsystems - Irvine United States 
785b89a8333Snatalie li - Sun Microsystems - Irvine United States 	(void) smb_getnetbiosname(nbname, sizeof (nbname));
786b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->sid_name_use = SidTypeUser;
787b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->domain_sid = smb_sid_dup(nt_domain_local_sid());
788b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->name = strdup(clnt->username);
789b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->domain_name = strdup(nbname);
790b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->n_groups = 0;
791b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->groups = NULL;
792b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->n_other_grps = 0;
793b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->other_grps = NULL;
794b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->flags = 0;
795b89a8333Snatalie li - Sun Microsystems - Irvine United States 
796b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (lui->name == NULL || lui->domain_name == NULL ||
797b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    lui->domain_sid == NULL)
798b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_INVALID_PARAMETER);
799b89a8333Snatalie li - Sun Microsystems - Irvine United States 
800b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (clnt->flags & NETR_CFLG_ANON) {
801b89a8333Snatalie li - Sun Microsystems - Irvine United States 		lui->user_sid = smb_wka_lookup_name("Anonymous", NULL);
802b89a8333Snatalie li - Sun Microsystems - Irvine United States 		lui->pgrp_sid = smb_wka_lookup_name("Anonymous", NULL);
803b89a8333Snatalie li - Sun Microsystems - Irvine United States 		lui->flags = SMB_UINFO_FLAG_ANON;
804b89a8333Snatalie li - Sun Microsystems - Irvine United States 
805b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (lui->user_sid == NULL || lui->pgrp_sid == NULL)
806b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (NT_STATUS_NO_MEMORY);
807b89a8333Snatalie li - Sun Microsystems - Irvine United States 
808b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_SUCCESS);
809b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
810b89a8333Snatalie li - Sun Microsystems - Irvine United States 
811b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (getpwuid_r(uid, &pw, pwbuf, sizeof (pwbuf)) == NULL)
812b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_NO_SUCH_USER);
813b89a8333Snatalie li - Sun Microsystems - Irvine United States 
814b89a8333Snatalie li - Sun Microsystems - Irvine United States 	/* Get the SID for user's uid & gid */
815b89a8333Snatalie li - Sun Microsystems - Irvine United States 	stat = smb_idmap_batch_create(&sib, 2, SMB_IDMAP_ID2SID);
816b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (stat != IDMAP_SUCCESS) {
817b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_INTERNAL_ERROR);
818b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
819b89a8333Snatalie li - Sun Microsystems - Irvine United States 
820b89a8333Snatalie li - Sun Microsystems - Irvine United States 	umap = &sib.sib_maps[0];
821b89a8333Snatalie li - Sun Microsystems - Irvine United States 	stat = smb_idmap_batch_getsid(sib.sib_idmaph, umap, pw.pw_uid,
822b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    SMB_IDMAP_USER);
823b89a8333Snatalie li - Sun Microsystems - Irvine United States 
824b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (stat != IDMAP_SUCCESS) {
825b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_idmap_batch_destroy(&sib);
826b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_INTERNAL_ERROR);
827b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
828b89a8333Snatalie li - Sun Microsystems - Irvine United States 
829b89a8333Snatalie li - Sun Microsystems - Irvine United States 	gmap = &sib.sib_maps[1];
830b89a8333Snatalie li - Sun Microsystems - Irvine United States 	stat = smb_idmap_batch_getsid(sib.sib_idmaph, gmap, pw.pw_gid,
831b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    SMB_IDMAP_GROUP);
832b89a8333Snatalie li - Sun Microsystems - Irvine United States 
833b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (stat != IDMAP_SUCCESS) {
834b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_idmap_batch_destroy(&sib);
835b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_INTERNAL_ERROR);
836b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
837b89a8333Snatalie li - Sun Microsystems - Irvine United States 
838b89a8333Snatalie li - Sun Microsystems - Irvine United States 	stat = smb_idmap_batch_getmappings(&sib);
839b89a8333Snatalie li - Sun Microsystems - Irvine United States 
840b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (stat != IDMAP_SUCCESS) {
841b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_INTERNAL_ERROR);
842b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
843b89a8333Snatalie li - Sun Microsystems - Irvine United States 
844b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->rid = umap->sim_rid;
845b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->user_sid = smb_sid_dup(umap->sim_sid);
846b89a8333Snatalie li - Sun Microsystems - Irvine United States 
847b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->primary_group_rid = gmap->sim_rid;
848b89a8333Snatalie li - Sun Microsystems - Irvine United States 	lui->pgrp_sid = smb_sid_dup(gmap->sim_sid);
849b89a8333Snatalie li - Sun Microsystems - Irvine United States 
850b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_idmap_batch_destroy(&sib);
851b89a8333Snatalie li - Sun Microsystems - Irvine United States 
852b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((lui->user_sid == NULL) || (lui->pgrp_sid == NULL))
853b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NT_STATUS_NO_MEMORY);
854b89a8333Snatalie li - Sun Microsystems - Irvine United States 
855b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (smb_lgrp_getbyname("Administrators", &grp) == SMB_LGRP_SUCCESS) {
856b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (smb_lgrp_is_member(&grp, lui->user_sid))
857b89a8333Snatalie li - Sun Microsystems - Irvine United States 			lui->flags = SMB_UINFO_FLAG_LADMIN;
858b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_lgrp_free(&grp);
859b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
860b89a8333Snatalie li - Sun Microsystems - Irvine United States 
861b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (NT_STATUS_SUCCESS);
862b89a8333Snatalie li - Sun Microsystems - Irvine United States }
863b89a8333Snatalie li - Sun Microsystems - Irvine United States 
864b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
865b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_is_valid
866b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
867b89a8333Snatalie li - Sun Microsystems - Irvine United States  * check to see if specified fields of the given access
868b89a8333Snatalie li - Sun Microsystems - Irvine United States  * token are valid.
869b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Returns 1 if all of them are valid; otherwise 0.
870b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
871b89a8333Snatalie li - Sun Microsystems - Irvine United States static int
872b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_is_valid(smb_token_t *token)
873b89a8333Snatalie li - Sun Microsystems - Irvine United States {
874b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int valid;
875b89a8333Snatalie li - Sun Microsystems - Irvine United States 
876b89a8333Snatalie li - Sun Microsystems - Irvine United States 	valid = (token->tkn_user != 0) &&
877b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_user->i_sidattr.sid != 0) &&
878b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_privileges != 0) &&
879b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_win_grps != 0) &&
880b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_owner != 0) &&
881b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_owner->i_sidattr.sid != 0) &&
882b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_primary_grp != 0) &&
883b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_primary_grp->i_sidattr.sid != 0);
884b89a8333Snatalie li - Sun Microsystems - Irvine United States 
885b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (valid);
886b89a8333Snatalie li - Sun Microsystems - Irvine United States }
887b89a8333Snatalie li - Sun Microsystems - Irvine United States 
888b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
889b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_user_sid
890b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
891b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Return a pointer to the user SID in the specified token. A null
892b89a8333Snatalie li - Sun Microsystems - Irvine United States  * pointer indicates an error.
893b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
894b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_sid_t *
895b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_user_sid(smb_token_t *token)
896b89a8333Snatalie li - Sun Microsystems - Irvine United States {
897b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token && token->tkn_user)
898b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return ((token)->tkn_user->i_sidattr.sid);
899b89a8333Snatalie li - Sun Microsystems - Irvine United States 
900b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (NULL);
901b89a8333Snatalie li - Sun Microsystems - Irvine United States }
902b89a8333Snatalie li - Sun Microsystems - Irvine United States 
903b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
904b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_group_sid
905b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
906b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Return a pointer to the group SID as indicated by the iterator.
907b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Setting the iterator to 0 before calling this function will return
908b89a8333Snatalie li - Sun Microsystems - Irvine United States  * the first group, which will always be the primary group. The
909b89a8333Snatalie li - Sun Microsystems - Irvine United States  * iterator will be incremented before returning the SID so that this
910b89a8333Snatalie li - Sun Microsystems - Irvine United States  * function can be used to cycle through the groups. The caller can
911b89a8333Snatalie li - Sun Microsystems - Irvine United States  * adjust the iterator as required between calls to obtain any specific
912b89a8333Snatalie li - Sun Microsystems - Irvine United States  * group.
913b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
914b89a8333Snatalie li - Sun Microsystems - Irvine United States  * On success a pointer to the appropriate group SID will be returned.
915b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Otherwise a null pointer will be returned.
916b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
917b89a8333Snatalie li - Sun Microsystems - Irvine United States static smb_sid_t *
918b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_group_sid(smb_token_t *token, int *iterator)
919b89a8333Snatalie li - Sun Microsystems - Irvine United States {
920b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_win_grps_t *groups;
921b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int index;
922b89a8333Snatalie li - Sun Microsystems - Irvine United States 
923b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token == NULL || iterator == NULL) {
924b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
925b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
926b89a8333Snatalie li - Sun Microsystems - Irvine United States 
927b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if ((groups = token->tkn_win_grps) == NULL) {
928b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
929b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
930b89a8333Snatalie li - Sun Microsystems - Irvine United States 
931b89a8333Snatalie li - Sun Microsystems - Irvine United States 	index = *iterator;
932b89a8333Snatalie li - Sun Microsystems - Irvine United States 
933b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (index < 0 || index >= groups->wg_count) {
934b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return (NULL);
935b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
936b89a8333Snatalie li - Sun Microsystems - Irvine United States 
937b89a8333Snatalie li - Sun Microsystems - Irvine United States 	++(*iterator);
938b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (groups->wg_groups[index].i_sidattr.sid);
939b89a8333Snatalie li - Sun Microsystems - Irvine United States }
940b89a8333Snatalie li - Sun Microsystems - Irvine United States 
941b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
942b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_is_member
943b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
944b89a8333Snatalie li - Sun Microsystems - Irvine United States  * This function will determine whether or not the specified SID is a
945b89a8333Snatalie li - Sun Microsystems - Irvine United States  * member of a token. The user SID and all group SIDs are tested.
946b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Returns 1 if the SID is a member of the token. Otherwise returns 0.
947b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
948b89a8333Snatalie li - Sun Microsystems - Irvine United States static int
949b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_is_member(smb_token_t *token, smb_sid_t *sid)
950b89a8333Snatalie li - Sun Microsystems - Irvine United States {
951b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_t *tsid;
952b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int iterator = 0;
953b89a8333Snatalie li - Sun Microsystems - Irvine United States 
954b89a8333Snatalie li - Sun Microsystems - Irvine United States 	tsid = smb_token_user_sid(token);
955b89a8333Snatalie li - Sun Microsystems - Irvine United States 	while (tsid) {
956b89a8333Snatalie li - Sun Microsystems - Irvine United States 		if (smb_sid_cmp(tsid, sid))
957b89a8333Snatalie li - Sun Microsystems - Irvine United States 			return (1);
958b89a8333Snatalie li - Sun Microsystems - Irvine United States 
959b89a8333Snatalie li - Sun Microsystems - Irvine United States 		tsid = smb_token_group_sid(token, &iterator);
960b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
961b89a8333Snatalie li - Sun Microsystems - Irvine United States 
962b89a8333Snatalie li - Sun Microsystems - Irvine United States 	return (0);
963b89a8333Snatalie li - Sun Microsystems - Irvine United States }
964b89a8333Snatalie li - Sun Microsystems - Irvine United States 
965b89a8333Snatalie li - Sun Microsystems - Irvine United States /*
966b89a8333Snatalie li - Sun Microsystems - Irvine United States  * smb_token_log
967b89a8333Snatalie li - Sun Microsystems - Irvine United States  *
968b89a8333Snatalie li - Sun Microsystems - Irvine United States  * Diagnostic routine to write the contents of a token to the log.
969b89a8333Snatalie li - Sun Microsystems - Irvine United States  */
970b89a8333Snatalie li - Sun Microsystems - Irvine United States void
971b89a8333Snatalie li - Sun Microsystems - Irvine United States smb_token_log(smb_token_t *token)
972b89a8333Snatalie li - Sun Microsystems - Irvine United States {
973b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_win_grps_t *w_grps;
974b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_posix_grps_t *x_grps;
975b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_attrs_t *grp;
976b89a8333Snatalie li - Sun Microsystems - Irvine United States 	char sidstr[SMB_SID_STRSZ];
977b89a8333Snatalie li - Sun Microsystems - Irvine United States 	int i;
978b89a8333Snatalie li - Sun Microsystems - Irvine United States 
979b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token == NULL)
980b89a8333Snatalie li - Sun Microsystems - Irvine United States 		return;
981b89a8333Snatalie li - Sun Microsystems - Irvine United States 
982b89a8333Snatalie li - Sun Microsystems - Irvine United States 	syslog(LOG_DEBUG, "Token for %s\\%s",
983b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_domain_name) ? token->tkn_domain_name : "-NULL-",
984b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    (token->tkn_account_name) ? token->tkn_account_name : "-NULL-");
985b89a8333Snatalie li - Sun Microsystems - Irvine United States 
986b89a8333Snatalie li - Sun Microsystems - Irvine United States 	syslog(LOG_DEBUG, "   User->Attr: %d",
987b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    token->tkn_user->i_sidattr.attrs);
988b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_tostr((smb_sid_t *)token->tkn_user->i_sidattr.sid, sidstr);
989b89a8333Snatalie li - Sun Microsystems - Irvine United States 	syslog(LOG_DEBUG, "   User->Sid: %s (id=%u)",
990b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    sidstr, token->tkn_user->i_id);
991b89a8333Snatalie li - Sun Microsystems - Irvine United States 
992b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_tostr((smb_sid_t *)token->tkn_owner->i_sidattr.sid, sidstr);
993b89a8333Snatalie li - Sun Microsystems - Irvine United States 	syslog(LOG_DEBUG, "   Ownr->Sid: %s (id=%u)",
994b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    sidstr, token->tkn_owner->i_id);
995b89a8333Snatalie li - Sun Microsystems - Irvine United States 
996b89a8333Snatalie li - Sun Microsystems - Irvine United States 	smb_sid_tostr((smb_sid_t *)token->tkn_primary_grp->i_sidattr.sid,
997b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    sidstr);
998b89a8333Snatalie li - Sun Microsystems - Irvine United States 	syslog(LOG_DEBUG, "   PGrp->Sid: %s (id=%u)",
999b89a8333Snatalie li - Sun Microsystems - Irvine United States 	    sidstr, token->tkn_primary_grp->i_id);
1000b89a8333Snatalie li - Sun Microsystems - Irvine United States 
1001b89a8333Snatalie li - Sun Microsystems - Irvine United States 	w_grps = token->tkn_win_grps;
1002b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (w_grps) {
1003b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_DEBUG, "   Windows groups: %d",
1004b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    w_grps->wg_count);
1005b89a8333Snatalie li - Sun Microsystems - Irvine United States 
1006b89a8333Snatalie li - Sun Microsystems - Irvine United States 		for (i = 0; i < w_grps->wg_count; ++i) {
1007b89a8333Snatalie li - Sun Microsystems - Irvine United States 			grp = &w_grps->wg_groups[i].i_sidattr;
1008b89a8333Snatalie li - Sun Microsystems - Irvine United States 			syslog(LOG_DEBUG,
1009b89a8333Snatalie li - Sun Microsystems - Irvine United States 			    "    Grp[%d].Attr:%d", i, grp->attrs);
1010b89a8333Snatalie li - Sun Microsystems - Irvine United States 			if (w_grps->wg_groups[i].i_sidattr.sid) {
1011b89a8333Snatalie li - Sun Microsystems - Irvine United States 				smb_sid_tostr((smb_sid_t *)grp->sid, sidstr);
1012b89a8333Snatalie li - Sun Microsystems - Irvine United States 				syslog(LOG_DEBUG,
1013b89a8333Snatalie li - Sun Microsystems - Irvine United States 				    "    Grp[%d].Sid: %s (id=%u)", i, sidstr,
1014b89a8333Snatalie li - Sun Microsystems - Irvine United States 				    w_grps->wg_groups[i].i_id);
1015b89a8333Snatalie li - Sun Microsystems - Irvine United States 			}
1016b89a8333Snatalie li - Sun Microsystems - Irvine United States 		}
1017b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
1018b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else
1019b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_DEBUG, "   No Windows groups");
1020b89a8333Snatalie li - Sun Microsystems - Irvine United States 
1021b89a8333Snatalie li - Sun Microsystems - Irvine United States 	x_grps = token->tkn_posix_grps;
1022b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (x_grps) {
1023b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_DEBUG, "   Solaris groups: %d",
1024b89a8333Snatalie li - Sun Microsystems - Irvine United States 		    x_grps->pg_ngrps);
1025b89a8333Snatalie li - Sun Microsystems - Irvine United States 		for (i = 0; i < x_grps->pg_ngrps; i++)
1026b89a8333Snatalie li - Sun Microsystems - Irvine United States 			syslog(LOG_DEBUG, "    %u",
1027b89a8333Snatalie li - Sun Microsystems - Irvine United States 			    x_grps->pg_grps[i]);
1028b89a8333Snatalie li - Sun Microsystems - Irvine United States 	}
1029b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else
1030b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_DEBUG, "   No Solaris groups");
1031b89a8333Snatalie li - Sun Microsystems - Irvine United States 
1032b89a8333Snatalie li - Sun Microsystems - Irvine United States 	if (token->tkn_privileges)
1033b89a8333Snatalie li - Sun Microsystems - Irvine United States 		smb_privset_log(token->tkn_privileges);
1034b89a8333Snatalie li - Sun Microsystems - Irvine United States 	else
1035b89a8333Snatalie li - Sun Microsystems - Irvine United States 		syslog(LOG_DEBUG, "   No privileges");
1036b89a8333Snatalie li - Sun Microsystems - Irvine United States }
1037