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 3 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, see <http://www.gnu.org/licenses/>. 18*/ 19 20#include "includes.h" 21 22bool sid_check_is_unix_users(const DOM_SID *sid) 23{ 24 return sid_equal(sid, &global_sid_Unix_Users); 25} 26 27bool sid_check_is_in_unix_users(const DOM_SID *sid) 28{ 29 DOM_SID dom_sid; 30 uint32 rid; 31 32 sid_copy(&dom_sid, sid); 33 sid_split_rid(&dom_sid, &rid); 34 35 return sid_check_is_unix_users(&dom_sid); 36} 37 38bool uid_to_unix_users_sid(uid_t uid, DOM_SID *sid) 39{ 40 sid_copy(sid, &global_sid_Unix_Users); 41 return sid_append_rid(sid, (uint32_t)uid); 42} 43 44bool gid_to_unix_groups_sid(gid_t gid, DOM_SID *sid) 45{ 46 sid_copy(sid, &global_sid_Unix_Groups); 47 return sid_append_rid(sid, (uint32_t)gid); 48} 49 50const char *unix_users_domain_name(void) 51{ 52 return "Unix User"; 53} 54 55bool lookup_unix_user_name(const char *name, DOM_SID *sid) 56{ 57 struct passwd *pwd; 58 59 pwd = Get_Pwnam_alloc(talloc_autofree_context(), name); 60 if (pwd == NULL) { 61 return False; 62 } 63 64 sid_copy(sid, &global_sid_Unix_Users); 65 sid_append_rid(sid, (uint32_t)pwd->pw_uid); /* For 64-bit uid's we have enough 66 * space ... */ 67 TALLOC_FREE(pwd); 68 return True; 69} 70 71bool sid_check_is_unix_groups(const DOM_SID *sid) 72{ 73 return sid_equal(sid, &global_sid_Unix_Groups); 74} 75 76bool sid_check_is_in_unix_groups(const DOM_SID *sid) 77{ 78 DOM_SID dom_sid; 79 uint32 rid; 80 81 sid_copy(&dom_sid, sid); 82 sid_split_rid(&dom_sid, &rid); 83 84 return sid_check_is_unix_groups(&dom_sid); 85} 86 87const char *unix_groups_domain_name(void) 88{ 89 return "Unix Group"; 90} 91 92bool lookup_unix_group_name(const char *name, DOM_SID *sid) 93{ 94 struct group *grp; 95 96 grp = sys_getgrnam(name); 97 if (grp == NULL) { 98 return False; 99 } 100 101 sid_copy(sid, &global_sid_Unix_Groups); 102 sid_append_rid(sid, (uint32_t)grp->gr_gid); /* For 64-bit uid's we have enough 103 * space ... */ 104 return True; 105} 106