Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : 4 : session_info utility functions 5 : 6 : Copyright (C) Andrew Bartlett 2008-2010 7 : 8 : This program is free software; you can redistribute it and/or modify 9 : it under the terms of the GNU General Public License as published by 10 : the Free Software Foundation; either version 3 of the License, or 11 : (at your option) any later version. 12 : 13 : This program is distributed in the hope that it will be useful, 14 : but WITHOUT ANY WARRANTY; without even the implied warranty of 15 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 : GNU General Public License for more details. 17 : 18 : You should have received a copy of the GNU General Public License 19 : along with this program. If not, see <http://www.gnu.org/licenses/>. 20 : */ 21 : 22 : #include "includes.h" 23 : #include "libcli/security/security.h" 24 : #include "librpc/gen_ndr/auth.h" 25 : 26 52402460 : enum security_user_level security_session_user_level(struct auth_session_info *session_info, 27 : const struct dom_sid *domain_sid) 28 : { 29 52402460 : struct security_token *token = NULL; 30 52402460 : bool authenticated = false; 31 52402460 : bool guest = false; 32 : 33 52402460 : if (!session_info) { 34 762263 : return SECURITY_ANONYMOUS; 35 : } 36 51640197 : token = session_info->security_token; 37 : 38 51640197 : if (security_token_is_system(token)) { 39 34594326 : return SECURITY_SYSTEM; 40 : } 41 : 42 17045871 : if (security_token_is_anonymous(token)) { 43 752338 : return SECURITY_ANONYMOUS; 44 : } 45 : 46 16293533 : authenticated = security_token_has_nt_authenticated_users(token); 47 16293533 : guest = security_token_has_builtin_guests(token); 48 16293533 : if (!authenticated) { 49 6777 : if (guest) { 50 66 : return SECURITY_GUEST; 51 : } 52 6711 : return SECURITY_ANONYMOUS; 53 : } 54 : 55 16286756 : if (security_token_has_builtin_administrators(token)) { 56 15826827 : return SECURITY_ADMINISTRATOR; 57 : } 58 : 59 459929 : if (domain_sid) { 60 3812 : struct dom_sid rodc_dcs = { .num_auths = 0 }; 61 3812 : sid_compose(&rodc_dcs, domain_sid, DOMAIN_RID_READONLY_DCS); 62 : 63 3812 : if (security_token_has_sid(token, &rodc_dcs)) { 64 1960 : return SECURITY_RO_DOMAIN_CONTROLLER; 65 : } 66 : } 67 : 68 457969 : if (security_token_has_enterprise_dcs(token)) { 69 24088 : return SECURITY_DOMAIN_CONTROLLER; 70 : } 71 : 72 433881 : return SECURITY_USER; 73 : }