The branch, master has been updated
       via  3bb8195... Fix Out of memory checks
      from  2a6a696... s3:auth add function to convert wbcAuthUserInfo to 
netr_SamInfo3

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 3bb819581b1dc2624a9e52c2cae065cc3bda6a4b
Author: Simo Sorce <sso...@redhat.com>
Date:   Thu May 27 19:22:02 2010 -0400

    Fix Out of memory checks
    
    Günther pushed an older version of the patch "s3:auth add function to copy 
a
    netr_SamInfo3 structure" that was missing these fixes.

-----------------------------------------------------------------------

Summary of changes:
 source3/auth/server_info.c |   96 +++++++++++++++++++++++++++-----------------
 1 files changed, 59 insertions(+), 37 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/auth/server_info.c b/source3/auth/server_info.c
index d9b25bd..27f0487 100644
--- a/source3/auth/server_info.c
+++ b/source3/auth/server_info.c
@@ -393,51 +393,73 @@ struct netr_SamInfo3 *copy_netr_SamInfo3(TALLOC_CTX 
*mem_ctx,
 {
        struct netr_SamInfo3 *info3;
 
-       info3 = talloc(mem_ctx, struct netr_SamInfo3);
+       info3 = talloc_zero(mem_ctx, struct netr_SamInfo3);
        if (!info3) return NULL;
 
        /* first copy all, then realloc pointers */
        info3->base = orig->base;
 
-       info3->base.account_name.string =
-               talloc_strdup(info3, orig->base.account_name.string);
-       RET_NOMEM(info3->base.account_name.string);
-       info3->base.full_name.string =
-               talloc_strdup(info3, orig->base.full_name.string);
-       RET_NOMEM(info3->base.full_name.string);
-       info3->base.logon_script.string =
-               talloc_strdup(info3, orig->base.logon_script.string);
-       RET_NOMEM(info3->base.logon_script.string);
-       info3->base.profile_path.string =
-               talloc_strdup(info3, orig->base.profile_path.string);
-       RET_NOMEM(info3->base.profile_path.string);
-       info3->base.home_directory.string =
-               talloc_strdup(info3, orig->base.home_directory.string);
-       RET_NOMEM(info3->base.home_directory.string);
-       info3->base.home_drive.string =
-               talloc_strdup(info3, orig->base.home_drive.string);
-       RET_NOMEM(info3->base.home_drive.string);
-
-       info3->base.groups.rids =
-               talloc_memdup(info3, orig->base.groups.rids,
-                       (sizeof(struct samr_RidWithAttribute) *
-                               orig->base.groups.count));
-       RET_NOMEM(info3->base.groups.rids);
-
-       info3->base.logon_server.string =
-               talloc_strdup(info3, orig->base.logon_server.string);
-       RET_NOMEM(info3->base.logon_server.string);
-       info3->base.domain.string =
-               talloc_strdup(info3, orig->base.domain.string);
-       RET_NOMEM(info3->base.domain.string);
+       if (orig->base.account_name.string) {
+               info3->base.account_name.string =
+                       talloc_strdup(info3, orig->base.account_name.string);
+               RET_NOMEM(info3->base.account_name.string);
+       }
+       if (orig->base.full_name.string) {
+               info3->base.full_name.string =
+                       talloc_strdup(info3, orig->base.full_name.string);
+               RET_NOMEM(info3->base.full_name.string);
+       }
+       if (orig->base.logon_script.string) {
+               info3->base.logon_script.string =
+                       talloc_strdup(info3, orig->base.logon_script.string);
+               RET_NOMEM(info3->base.logon_script.string);
+       }
+       if (orig->base.profile_path.string) {
+               info3->base.profile_path.string =
+                       talloc_strdup(info3, orig->base.profile_path.string);
+               RET_NOMEM(info3->base.profile_path.string);
+       }
+       if (orig->base.home_directory.string) {
+               info3->base.home_directory.string =
+                       talloc_strdup(info3, orig->base.home_directory.string);
+               RET_NOMEM(info3->base.home_directory.string);
+       }
+       if (orig->base.home_drive.string) {
+               info3->base.home_drive.string =
+                       talloc_strdup(info3, orig->base.home_drive.string);
+               RET_NOMEM(info3->base.home_drive.string);
+       }
 
-       info3->base.domain_sid = sid_dup_talloc(info3, orig->base.domain_sid);
-       RET_NOMEM(info3->base.domain_sid);
+       if (orig->base.groups.count) {
+               info3->base.groups.rids =
+                       talloc_memdup(info3, orig->base.groups.rids,
+                               (sizeof(struct samr_RidWithAttribute) *
+                                       orig->base.groups.count));
+               RET_NOMEM(info3->base.groups.rids);
+       }
+
+       if (orig->base.logon_server.string) {
+               info3->base.logon_server.string =
+                       talloc_strdup(info3, orig->base.logon_server.string);
+               RET_NOMEM(info3->base.logon_server.string);
+       }
+       if (orig->base.domain.string) {
+               info3->base.domain.string =
+                       talloc_strdup(info3, orig->base.domain.string);
+               RET_NOMEM(info3->base.domain.string);
+       }
+
+       if (orig->base.domain_sid) {
+               info3->base.domain_sid = sid_dup_talloc(info3, 
orig->base.domain_sid);
+               RET_NOMEM(info3->base.domain_sid);
+       }
 
-       info3->sids = talloc_memdup(info3, orig->sids,
-                                   (sizeof(struct netr_SidAttr) *
+       if (orig->sidcount) {
+               info3->sids = talloc_memdup(info3, orig->sids,
+                                           (sizeof(struct netr_SidAttr) *
                                                        orig->sidcount));
-       RET_NOMEM(info3->sids);
+               RET_NOMEM(info3->sids);
+       }
 
        return info3;
 }


-- 
Samba Shared Repository

Reply via email to