auth: add auth_user_info_copy() function
authorStefan Metzmacher <metze@samba.org>
Tue, 6 Mar 2018 15:38:10 +0000 (16:38 +0100)
committerRalph Boehme <slow@samba.org>
Thu, 15 Mar 2018 20:54:17 +0000 (21:54 +0100)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13328

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
auth/auth_sam_reply.c
auth/auth_sam_reply.h

index 15d17b0745e6fb052671a9a7bf1af7e03ad25acd..bd695151dc0d434c7a2cf9a3a1e8fc9802b7da75 100644 (file)
@@ -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
  */
index 4aa3096c8896c9b8d25f0cfaa60e61b7d0029fa3..e4b26e961d7ef173a23201dc11c0928814b851a5 100644 (file)
@@ -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);