From: Andrew Bartlett Date: Fri, 15 Sep 2023 05:31:44 +0000 (+1200) Subject: libcli/security: Move dup_nt_token() to libcli/security X-Git-Tag: tevent-0.16.0~426 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13d3c6156f9f17d433f96dca9124d10187aac874;p=thirdparty%2Fsamba.git libcli/security: Move dup_nt_token() to libcli/security Signed-off-by: Andrew Bartlett Reviewed-by: Douglas Bagnall --- diff --git a/libcli/security/security_token.c b/libcli/security/security_token.c index 95bf68e8e24..1c76b921e95 100644 --- a/libcli/security/security_token.c +++ b/libcli/security/security_token.c @@ -29,6 +29,7 @@ #include "libcli/security/security_token.h" #include "libcli/security/dom_sid.h" #include "libcli/security/privileges.h" +#include "librpc/gen_ndr/ndr_security.h" /* return a blank security token @@ -43,6 +44,61 @@ struct security_token *security_token_initialise(TALLOC_CTX *mem_ctx, return st; } +/**************************************************************************** + Duplicate a SID token. +****************************************************************************/ + +struct security_token *dup_nt_token(TALLOC_CTX *mem_ctx, const struct security_token *src) +{ + TALLOC_CTX *frame = NULL; + struct security_token *dst = NULL; + DATA_BLOB blob; + enum ndr_err_code ndr_err; + + if (src == NULL) { + return NULL; + } + + frame = talloc_stackframe(); + + ndr_err = ndr_push_struct_blob( + &blob, + frame, + src, + (ndr_push_flags_fn_t)ndr_push_security_token); + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + DBG_ERR("Failed to duplicate security_token ndr_push_security_token failed: %s\n", + ndr_errstr(ndr_err)); + TALLOC_FREE(frame); + return NULL; + } + + dst = talloc_zero(mem_ctx, struct security_token); + if (dst == NULL) { + DBG_ERR("talloc failed\n"); + TALLOC_FREE(frame); + return NULL; + } + + ndr_err = ndr_pull_struct_blob( + &blob, + dst, + dst, + (ndr_pull_flags_fn_t)ndr_pull_security_token); + + if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { + DBG_ERR("Failed to duplicate security_token ndr_pull_security_token " + "failed: %s\n", + ndr_errstr(ndr_err)); + TALLOC_FREE(dst); + TALLOC_FREE(frame); + return NULL; + } + + TALLOC_FREE(frame); + return dst; +} + /**************************************************************************** prints a struct security_token to debug output. ****************************************************************************/ diff --git a/libcli/security/security_token.h b/libcli/security/security_token.h index 1c9b2402853..f2ff1b84b84 100644 --- a/libcli/security/security_token.h +++ b/libcli/security/security_token.h @@ -39,6 +39,8 @@ struct security_token *security_token_initialise(TALLOC_CTX *mem_ctx, enum claims_evaluation_control evaluate_claims); +struct security_token *dup_nt_token(TALLOC_CTX *mem_ctx, const struct security_token *ptoken); + /**************************************************************************** prints a struct security_token to debug output. ****************************************************************************/ diff --git a/source3/include/proto.h b/source3/include/proto.h index 5dd35c3c0df..20c9ad8cd2f 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -394,7 +394,6 @@ void smb_nscd_flush_group_cache(void); /* The following definitions come from lib/util_nttoken.c */ -struct security_token *dup_nt_token(TALLOC_CTX *mem_ctx, const struct security_token *ptoken); NTSTATUS merge_nt_token(TALLOC_CTX *mem_ctx, const struct security_token *token_1, const struct security_token *token_2, diff --git a/source3/lib/util_nttoken.c b/source3/lib/util_nttoken.c index 581ab3dabe7..af9ce37c43e 100644 --- a/source3/lib/util_nttoken.c +++ b/source3/lib/util_nttoken.c @@ -27,62 +27,6 @@ #include "includes.h" #include "../libcli/security/security.h" -#include "librpc/gen_ndr/ndr_security.h" - -/**************************************************************************** - Duplicate a SID token. -****************************************************************************/ - -struct security_token *dup_nt_token(TALLOC_CTX *mem_ctx, const struct security_token *src) -{ - TALLOC_CTX *frame = NULL; - struct security_token *dst = NULL; - DATA_BLOB blob; - enum ndr_err_code ndr_err; - - if (src == NULL) { - return NULL; - } - - frame = talloc_stackframe(); - - ndr_err = ndr_push_struct_blob( - &blob, - frame, - src, - (ndr_push_flags_fn_t)ndr_push_security_token); - if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - DBG_ERR("Failed to duplicate security_token ndr_push_security_token failed: %s\n", - ndr_errstr(ndr_err)); - TALLOC_FREE(frame); - return NULL; - } - - dst = talloc_zero(mem_ctx, struct security_token); - if (dst == NULL) { - DBG_ERR("talloc failed\n"); - TALLOC_FREE(frame); - return NULL; - } - - ndr_err = ndr_pull_struct_blob( - &blob, - dst, - dst, - (ndr_pull_flags_fn_t)ndr_pull_security_token); - - if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { - DBG_ERR("Failed to duplicate security_token ndr_pull_security_token " - "failed: %s\n", - ndr_errstr(ndr_err)); - TALLOC_FREE(dst); - TALLOC_FREE(frame); - return NULL; - } - - TALLOC_FREE(frame); - return dst; -} /**************************************************************************** merge NT tokens