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