diff options
Diffstat (limited to 'libcli')
-rw-r--r-- | libcli/security/security.h | 1 | ||||
-rw-r--r-- | libcli/security/session.c | 64 | ||||
-rw-r--r-- | libcli/security/session.h | 50 | ||||
-rw-r--r-- | libcli/security/wscript_build | 2 |
4 files changed, 116 insertions, 1 deletions
diff --git a/libcli/security/security.h b/libcli/security/security.h index 39ae3ec6cc..bb7bc7208a 100644 --- a/libcli/security/security.h +++ b/libcli/security/security.h @@ -105,5 +105,6 @@ struct object_tree { #include "libcli/security/sddl.h" #include "libcli/security/privileges.h" #include "libcli/security/access_check.h" +#include "libcli/security/session.h" #endif diff --git a/libcli/security/session.c b/libcli/security/session.c new file mode 100644 index 0000000000..0c32556fa4 --- /dev/null +++ b/libcli/security/session.c @@ -0,0 +1,64 @@ +/* + Unix SMB/CIFS implementation. + + session_info utility functions + + Copyright (C) Andrew Bartlett 2008-2010 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "includes.h" +#include "libcli/security/security.h" +#include "librpc/gen_ndr/auth.h" + +enum security_user_level security_session_user_level(struct auth_session_info *session_info, + const struct dom_sid *domain_sid) +{ + if (!session_info) { + return SECURITY_ANONYMOUS; + } + + if (security_token_is_system(session_info->security_token)) { + return SECURITY_SYSTEM; + } + + if (security_token_is_anonymous(session_info->security_token)) { + return SECURITY_ANONYMOUS; + } + + if (security_token_has_builtin_administrators(session_info->security_token)) { + return SECURITY_ADMINISTRATOR; + } + + if (domain_sid) { + struct dom_sid *rodc_dcs; + rodc_dcs = dom_sid_add_rid(session_info, domain_sid, DOMAIN_RID_READONLY_DCS); + if (security_token_has_sid(session_info->security_token, rodc_dcs)) { + talloc_free(rodc_dcs); + return SECURITY_RO_DOMAIN_CONTROLLER; + } + talloc_free(rodc_dcs); + } + + if (security_token_has_enterprise_dcs(session_info->security_token)) { + return SECURITY_DOMAIN_CONTROLLER; + } + + if (security_token_has_nt_authenticated_users(session_info->security_token)) { + return SECURITY_USER; + } + + return SECURITY_ANONYMOUS; +} diff --git a/libcli/security/session.h b/libcli/security/session.h new file mode 100644 index 0000000000..36da09b8df --- /dev/null +++ b/libcli/security/session.h @@ -0,0 +1,50 @@ +/* + Unix SMB/CIFS implementation. + + session_info utility functions + + Copyright (C) Andrew Bartlett 2008-2010 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _LIBCLI_SECURITY_SESSION_H_ +#define _LIBCLI_SECURITY_SESSION_H_ + +enum security_user_level { + SECURITY_ANONYMOUS = 0, + SECURITY_USER = 10, + SECURITY_RO_DOMAIN_CONTROLLER = 20, + SECURITY_DOMAIN_CONTROLLER = 30, + SECURITY_ADMINISTRATOR = 40, + SECURITY_SYSTEM = 50 +}; + +struct cli_credentials; +struct security_token; +struct auth_user_info; +struct auth_user_info_torture; + +struct auth_session_info { + struct security_token *security_token; + struct auth_user_info *info; + struct auth_user_info_torture *torture; + DATA_BLOB session_key; + struct cli_credentials *credentials; +}; + +enum security_user_level security_session_user_level(struct auth_session_info *session_info, + const struct dom_sid *domain_sid); + +#endif diff --git a/libcli/security/wscript_build b/libcli/security/wscript_build index 3526e66aa2..3f2e06a908 100644 --- a/libcli/security/wscript_build +++ b/libcli/security/wscript_build @@ -2,7 +2,7 @@ bld.SAMBA_LIBRARY('security', - source='dom_sid.c display_sec.c secace.c secacl.c security_descriptor.c sddl.c privileges.c security_token.c access_check.c object_tree.c create_descriptor.c util_sid.c', + source='dom_sid.c display_sec.c secace.c secacl.c security_descriptor.c sddl.c privileges.c security_token.c access_check.c object_tree.c create_descriptor.c util_sid.c session.c', private_library=True, deps='talloc ndr NDR_SECURITY' ) |