The branch, master has been updated
       via  290e7de s3-pdbtest: Fix pdbtest to compare the same fields
       via  43555d6 s4-samldb: do not talloc_steal() the elements of the 
original request
       via  a7f26d5 s3-pdbtest: Report and handle errors in pdb->getsampwnam()
       via  ff4d8fc s3-pdb_samba4: Allocate and free a talloc_stackframe() in 
pdb_samba4_replace_by_sam()
      from  5df1fda s3: Restore async i/o with the "native" AIO interface

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


- Log -----------------------------------------------------------------
commit 290e7de47a43d921bcd08a1f459a3d6b8d129c99
Author: Andrew Bartlett <[email protected]>
Date:   Tue Jun 26 21:06:25 2012 +1000

    s3-pdbtest: Fix pdbtest to compare the same fields
    
    Autobuild-User(master): Andrew Bartlett <[email protected]>
    Autobuild-Date(master): Tue Jun 26 16:09:28 CEST 2012 on sn-devel-104

commit 43555d6439460d2bafa54300221856142c83aa3f
Author: Andrew Bartlett <[email protected]>
Date:   Tue Jun 26 20:53:08 2012 +1000

    s4-samldb: do not talloc_steal() the elements of the original request

commit a7f26d5c6d441e1688382e5b9d3543f8a81dd74d
Author: Andrew Bartlett <[email protected]>
Date:   Tue Jun 26 20:52:07 2012 +1000

    s3-pdbtest: Report and handle errors in pdb->getsampwnam()

commit ff4d8fcd8d69e19608cc5b8bd65ca022d714c95a
Author: Andrew Bartlett <[email protected]>
Date:   Tue Jun 26 20:51:17 2012 +1000

    s3-pdb_samba4: Allocate and free a talloc_stackframe() in 
pdb_samba4_replace_by_sam()

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

Summary of changes:
 source3/passdb/pdb_samba4.c             |   13 ++++++++++---
 source3/torture/pdbtest.c               |   10 ++++++----
 source4/dsdb/samdb/ldb_modules/samldb.c |   14 ++++++++++----
 3 files changed, 26 insertions(+), 11 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/passdb/pdb_samba4.c b/source3/passdb/pdb_samba4.c
index 22a5908..c94f29c 100644
--- a/source3/passdb/pdb_samba4.c
+++ b/source3/passdb/pdb_samba4.c
@@ -335,6 +335,7 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
                                     struct ldb_dn *dn,
                                     struct samu *sam)
 {
+       TALLOC_CTX *frame = talloc_stackframe();
        int ret = LDB_SUCCESS;
        const char *pw;
        struct ldb_message *msg;
@@ -342,7 +343,7 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
        uint32_t dsdb_flags = 0;
        /* TODO: All fields :-) */
 
-       msg = ldb_msg_new(talloc_tos());
+       msg = ldb_msg_new(frame);
        if (!msg) {
                return false;
        }
@@ -350,11 +351,11 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
        msg->dn = dn;
 
        /* build modify request */
-       ret = ldb_build_mod_req(&req, state->ldb, talloc_tos(), msg, NULL, NULL,
+       ret = ldb_build_mod_req(&req, state->ldb, frame, msg, NULL, NULL,
                                ldb_op_default_callback,
                                NULL);
         if (ret != LDB_SUCCESS) {
-               talloc_free(msg);
+               talloc_free(frame);
                return ret;
         }
 
@@ -371,6 +372,7 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
        if (need_update(sam, PDB_PLAINTEXT_PW)) {
                struct ldb_val pw_utf16;
                if (pw == NULL) {
+                       talloc_free(frame);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
                
@@ -476,9 +478,11 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
                uint32_t rid;
                NTSTATUS status = dom_sid_split_rid(NULL, sid, NULL, &rid);
                if (!NT_STATUS_IS_OK(status)) {
+                       talloc_free(frame);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
                if (!dom_sid_in_domain(samdb_domain_sid(state->ldb), sid)) {
+                       talloc_free(frame);
                        return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX;
                }
                ret |= samdb_msg_add_uint(state->ldb, msg, msg, 
"primaryGroupID", rid);
@@ -576,10 +580,12 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
 
  */
        if (ret != LDB_SUCCESS) {
+               talloc_free(frame);
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
        if (msg->num_elements == 0) {
+               talloc_free(frame);
                /* Nothing to do, just return success */
                return LDB_SUCCESS;
        }
@@ -592,6 +598,7 @@ static int pdb_samba4_replace_by_sam(struct 
pdb_samba4_state *state,
                         ldb_errstring(state->ldb)));
        }
 
+       talloc_free(frame);
        return ret;
 }
 
diff --git a/source3/torture/pdbtest.c b/source3/torture/pdbtest.c
index 1257eff..14e28e9 100644
--- a/source3/torture/pdbtest.c
+++ b/source3/torture/pdbtest.c
@@ -133,7 +133,7 @@ static bool samu_correct(struct samu *s1, struct samu *s2)
        }
 
        /* Check kickoff time */
-       if (pdb_get_kickoff_time(s1) != pdb_get_logoff_time(s2)) {
+       if (pdb_get_kickoff_time(s1) != pdb_get_kickoff_time(s2)) {
                DEBUG(0, ("Kickoff time is not written correctly\n"));
                ret = False;
        }
@@ -428,14 +428,16 @@ int main(int argc, char **argv)
        }
 
        /* Get account information through getsampwnam() */
-       if (NT_STATUS_IS_ERR(pdb->getsampwnam(pdb, in, out->username))) {
-               fprintf(stderr, "Error getting sampw of added user %s.\n",
-                               out->username);
+       rv = pdb->getsampwnam(pdb, in, out->username);
+       if (NT_STATUS_IS_ERR(rv)) {
+               fprintf(stderr, "Error getting sampw of added user %s: %s\n",
+                       out->username, nt_errstr(rv));
                if (!NT_STATUS_IS_OK(rv = pdb->delete_sam_account(pdb, out))) {
                        fprintf(stderr, "Error in delete_sam_account %s\n", 
                                        get_friendly_nt_error_msg(rv));
                }
                TALLOC_FREE(ctx);
+               exit(1);
        }
 
        /* Verify integrity */
diff --git a/source4/dsdb/samdb/ldb_modules/samldb.c 
b/source4/dsdb/samdb/ldb_modules/samldb.c
index a859fc9..bb30605 100644
--- a/source4/dsdb/samdb/ldb_modules/samldb.c
+++ b/source4/dsdb/samdb/ldb_modules/samldb.c
@@ -1689,8 +1689,10 @@ static int samldb_sam_accountname_check(struct 
samldb_ctx *ac)
        if (ret != LDB_SUCCESS) {
                return ret;
        }
-       sam_accountname = talloc_steal(ac,
-                                      ldb_msg_find_attr_as_string(tmp_msg, 
"sAMAccountName", NULL));
+
+       /* We must not steal the original string, it belongs to the caller! */
+       sam_accountname = talloc_strdup(ac, 
+                                       ldb_msg_find_attr_as_string(tmp_msg, 
"sAMAccountName", NULL));
        talloc_free(tmp_msg);
 
        if (sam_accountname == NULL) {
@@ -1901,8 +1903,12 @@ static int samldb_service_principal_names_change(struct 
samldb_ctx *ac)
                if (ret != LDB_SUCCESS) {
                        return ret;
                }
-               dns_hostname = talloc_steal(ac,
-                                           ldb_msg_find_attr_as_string(msg, 
"dNSHostName", NULL));
+               dns_hostname = talloc_strdup(ac, 
+                                            ldb_msg_find_attr_as_string(msg, 
"dNSHostName", NULL));
+               if (dns_hostname == NULL) {
+                       return ldb_module_oom(ac->module);
+               }
+                       
                talloc_free(msg);
 
                ret = dsdb_module_search_dn(ac->module, ac, &res, ac->msg->dn,


-- 
Samba Shared Repository

Reply via email to