From df9ae9d72560578d0000a4083bd2ba3bf5cbd910 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 6 Mar 2018 16:38:10 +0100 Subject: auth: add auth_user_info_copy() function BUG: https://bugzilla.samba.org/show_bug.cgi?id=13328 Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme (cherry picked from commit 6ff891195855403bc485725aef8d43d4e3cabacb) --- auth/auth_sam_reply.c | 35 +++++++++++++++++++++++++++++++++++ auth/auth_sam_reply.h | 3 +++ 2 files changed, 38 insertions(+) (limited to 'auth') diff --git a/auth/auth_sam_reply.c b/auth/auth_sam_reply.c index 15d17b0745e..bd695151dc0 100644 --- a/auth/auth_sam_reply.c +++ b/auth/auth_sam_reply.c @@ -333,6 +333,41 @@ NTSTATUS make_user_info_SamBaseInfo(TALLOC_CTX *mem_ctx, return NT_STATUS_OK; } +struct auth_user_info *auth_user_info_copy(TALLOC_CTX *mem_ctx, + const struct auth_user_info *src) +{ + struct auth_user_info *dst = NULL; + + dst = talloc_zero(mem_ctx, struct auth_user_info); + if (dst == NULL) { + return NULL; + } + + *dst = *src; +#define _COPY_STRING(_mem, _str) do { \ + if ((_str) != NULL) { \ + (_str) = talloc_strdup((_mem), (_str)); \ + if ((_str) == NULL) { \ + TALLOC_FREE(dst); \ + return NULL; \ + } \ + } \ +} while(0) + _COPY_STRING(dst, dst->account_name); + _COPY_STRING(dst, dst->user_principal_name); + _COPY_STRING(dst, dst->domain_name); + _COPY_STRING(dst, dst->dns_domain_name); + _COPY_STRING(dst, dst->full_name); + _COPY_STRING(dst, dst->logon_script); + _COPY_STRING(dst, dst->profile_path); + _COPY_STRING(dst, dst->home_directory); + _COPY_STRING(dst, dst->home_drive); + _COPY_STRING(dst, dst->logon_server); +#undef _COPY_STRING + + return dst; +} + /** * Make a user_info_dc struct from the info3 returned by a domain logon */ diff --git a/auth/auth_sam_reply.h b/auth/auth_sam_reply.h index 4aa3096c889..e4b26e961d7 100644 --- a/auth/auth_sam_reply.h +++ b/auth/auth_sam_reply.h @@ -38,6 +38,9 @@ NTSTATUS make_user_info_SamBaseInfo(TALLOC_CTX *mem_ctx, bool authenticated, struct auth_user_info **_user_info); +struct auth_user_info *auth_user_info_copy(TALLOC_CTX *mem_ctx, + const struct auth_user_info *src); + NTSTATUS auth_convert_user_info_dc_saminfo6(TALLOC_CTX *mem_ctx, const struct auth_user_info_dc *user_info_dc, struct netr_SamInfo6 **_sam6); -- cgit v1.2.1