1/* 2 Unix SMB/CIFS implementation. 3 Translate unix-defined names to SIDs and vice versa 4 Copyright (C) Volker Lendecke 2005 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19*/ 20 21#include "includes.h" 22 23BOOL sid_check_is_unix_users(const DOM_SID *sid) 24{ 25 return sid_equal(sid, &global_sid_Unix_Users); 26} 27 28BOOL sid_check_is_in_unix_users(const DOM_SID *sid) 29{ 30 DOM_SID dom_sid; 31 uint32 rid; 32 33 sid_copy(&dom_sid, sid); 34 sid_split_rid(&dom_sid, &rid); 35 36 return sid_check_is_unix_users(&dom_sid); 37} 38 39BOOL uid_to_unix_users_sid(uid_t uid, DOM_SID *sid) 40{ 41 sid_copy(sid, &global_sid_Unix_Users); 42 return sid_append_rid(sid, uid); 43} 44 45BOOL gid_to_unix_groups_sid(gid_t gid, DOM_SID *sid) 46{ 47 sid_copy(sid, &global_sid_Unix_Groups); 48 return sid_append_rid(sid, gid); 49} 50 51const char *unix_users_domain_name(void) 52{ 53 return "Unix User"; 54} 55 56BOOL lookup_unix_user_name(const char *name, DOM_SID *sid) 57{ 58 struct passwd *pwd; 59 60 pwd = getpwnam_alloc(NULL, name); 61 if (pwd == NULL) { 62 return False; 63 } 64 65 sid_copy(sid, &global_sid_Unix_Users); 66 sid_append_rid(sid, pwd->pw_uid); /* For 64-bit uid's we have enough 67 * space ... */ 68 TALLOC_FREE(pwd); 69 return True; 70} 71 72BOOL sid_check_is_unix_groups(const DOM_SID *sid) 73{ 74 return sid_equal(sid, &global_sid_Unix_Groups); 75} 76 77BOOL sid_check_is_in_unix_groups(const DOM_SID *sid) 78{ 79 DOM_SID dom_sid; 80 uint32 rid; 81 82 sid_copy(&dom_sid, sid); 83 sid_split_rid(&dom_sid, &rid); 84 85 return sid_check_is_unix_groups(&dom_sid); 86} 87 88const char *unix_groups_domain_name(void) 89{ 90 return "Unix Group"; 91} 92 93BOOL lookup_unix_group_name(const char *name, DOM_SID *sid) 94{ 95 struct group *grp; 96 97 grp = getgrnam(name); 98 if (grp == NULL) { 99 return False; 100 } 101 102 sid_copy(sid, &global_sid_Unix_Groups); 103 sid_append_rid(sid, grp->gr_gid); /* For 64-bit uid's we have enough 104 * space ... */ 105 return True; 106} 107