The branch, master has been updated
       via  0b4a3b7 s4-rpc: dnsserver: return DNS_RANK_NS_GLUE recors when 
explicitly asked for
       via  2c342e4 s4-rpc: dnsserver: handle updates of tombstoned dnsNode 
objects
       via  6f2862e s4-rpc: dnsserver: Do not search for deleted DNS entries
      from  7f976f4 s3: smbd: vfs_dirsort module.

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


- Log -----------------------------------------------------------------
commit 0b4a3b76111411e8969932a3da4ffab989e0da4c
Author: Stefan Metzmacher <[email protected]>
Date:   Thu Sep 4 09:40:34 2014 +0200

    s4-rpc: dnsserver: return DNS_RANK_NS_GLUE recors when explicitly asked for
    
    NS records should be included in the query for sub-domains.  NS records
    got dropped when the rank for NS records was correctly set to NS_GLUE
    from ZONE in commit 2036cbd9249c84d9b46370f0e8cd6a0264c737ba.
    
      samba-tool dns query 172.31.9.161 s4xdom.base @ ALL
      =>
      Name=glue, Records=0, Children=0
    
      samba-tool dns query 172.31.9.161 s4xdom.base glue ALL
      =>
        Name=, Records=1, Children=0
          NS: glue.dns.private. (flags=40000082, serial=21, ttl=900)
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=10751
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Amitay Isaacs <[email protected]>
    
    Autobuild-User(master): Amitay Isaacs <[email protected]>
    Autobuild-Date(master): Thu Sep  4 14:37:51 CEST 2014 on sn-devel-104

commit 2c342e488dcd3cef465a1b376bb22bf495f6832b
Author: Stefan Metzmacher <[email protected]>
Date:   Thu Sep 4 07:19:46 2014 +0200

    s4-rpc: dnsserver: handle updates of tombstoned dnsNode objects
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=10749
    
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Reviewed-by: Amitay Isaacs <[email protected]>

commit 6f2862e76608862bb4142a86f36c8506114bf6c7
Author: Amitay Isaacs <[email protected]>
Date:   Thu Jul 31 17:24:52 2014 +1000

    s4-rpc: dnsserver: Do not search for deleted DNS entries
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=10749
    
    Signed-off-by: Amitay Isaacs <[email protected]>
    Reviewed-by: Stefan Metzmacher <[email protected]>

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

Summary of changes:
 source4/rpc_server/dnsserver/dcerpc_dnsserver.c |   18 +++++++++++-------
 source4/rpc_server/dnsserver/dnsdata.c          |    9 +++++++++
 source4/rpc_server/dnsserver/dnsdb.c            |   17 +++++++++++++++--
 3 files changed, 35 insertions(+), 9 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c 
b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
index 856016c..5162ab0 100644
--- a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
+++ b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
@@ -1631,7 +1631,8 @@ static WERROR dnsserver_enumerate_root_records(struct 
dnsserver_state *dsstate,
        }
 
        ret = ldb_search(dsstate->samdb, tmp_ctx, &res, z->zone_dn,
-                               LDB_SCOPE_ONELEVEL, attrs, 
"(&(objectClass=dnsNode)(name=@))");
+                        LDB_SCOPE_ONELEVEL, attrs,
+                        
"(&(objectClass=dnsNode)(name=@)(!(dNSTombstoned=TRUE)))");
        if (ret != LDB_SUCCESS) {
                talloc_free(tmp_ctx);
                return WERR_INTERNAL_DB_ERROR;
@@ -1663,8 +1664,9 @@ static WERROR dnsserver_enumerate_root_records(struct 
dnsserver_state *dsstate,
        if (select_flag & DNS_RPC_VIEW_ADDITIONAL_DATA) {
                for (i=0; i<add_count; i++) {
                        ret = ldb_search(dsstate->samdb, tmp_ctx, &res, 
z->zone_dn,
-                                       LDB_SCOPE_ONELEVEL, attrs,
-                                       "(&(objectClass=dnsNode)(name=%s))", 
add_names[i]);
+                                        LDB_SCOPE_ONELEVEL, attrs,
+                                        
"(&(objectClass=dnsNode)(name=%s)(!(dNSTombstoned=TRUE)))",
+                                       add_names[i]);
                        if (ret != LDB_SUCCESS || res->count == 0) {
                                talloc_free(res);
                                continue;
@@ -1728,11 +1730,12 @@ static WERROR dnsserver_enumerate_records(struct 
dnsserver_state *dsstate,
        /* search all records under parent tree */
        if (strcasecmp(name, z->name) == 0) {
                ret = ldb_search(dsstate->samdb, tmp_ctx, &res, z->zone_dn,
-                               LDB_SCOPE_ONELEVEL, attrs, 
"(objectClass=dnsNode)");
+                                LDB_SCOPE_ONELEVEL, attrs,
+                                
"(&(objectClass=dnsNode)(!(dNSTombstoned=TRUE)))");
        } else {
                ret = ldb_search(dsstate->samdb, tmp_ctx, &res, z->zone_dn,
-                               LDB_SCOPE_ONELEVEL, attrs,
-                               
"(&(objectClass=dnsNode)(|(name=%s)(name=*.%s)))",
+                                LDB_SCOPE_ONELEVEL, attrs,
+                                
"(&(objectClass=dnsNode)(|(name=%s)(name=*.%s))(!(dNSTombstoned=TRUE)))",
                                name, name);
        }
        if (ret != LDB_SUCCESS) {
@@ -1807,7 +1810,8 @@ static WERROR dnsserver_enumerate_records(struct 
dnsserver_state *dsstate,
                                name = dns_split_node_name(tmp_ctx, 
add_names[i], z2->name);
                                ret = ldb_search(dsstate->samdb, tmp_ctx, &res, 
z2->zone_dn,
                                                LDB_SCOPE_ONELEVEL, attrs,
-                                               
"(&(objectClass=dnsNode)(name=%s))", name);
+                                               
"(&(objectClass=dnsNode)(name=%s)(!(dNSTombstoned=TRUE)))",
+                                               name);
                                talloc_free(name);
                                if (ret != LDB_SUCCESS) {
                                        continue;
diff --git a/source4/rpc_server/dnsserver/dnsdata.c 
b/source4/rpc_server/dnsserver/dnsdata.c
index 4866006..f752490 100644
--- a/source4/rpc_server/dnsserver/dnsdata.c
+++ b/source4/rpc_server/dnsserver/dnsdata.c
@@ -798,6 +798,15 @@ WERROR dns_fill_records_array(TALLOC_CTX *mem_ctx,
                        if (select_flag & DNS_RPC_VIEW_AUTHORITY_DATA) {
                                if (dnsp_rec.rank == DNS_RANK_ZONE) {
                                        found = true;
+                               } else if (dnsp_rec.rank == DNS_RANK_NS_GLUE) {
+                                       /*
+                                        * If branch_name is NULL, we're
+                                        * explicitly asked to also return
+                                        * DNS_RANK_NS_GLUE records
+                                        */
+                                       if (branch_name == NULL) {
+                                               found = true;
+                                       }
                                }
                        }
                        if (select_flag & DNS_RPC_VIEW_CACHE_DATA) {
diff --git a/source4/rpc_server/dnsserver/dnsdb.c 
b/source4/rpc_server/dnsserver/dnsdb.c
index 24e9e89..e567f5a 100644
--- a/source4/rpc_server/dnsserver/dnsdb.c
+++ b/source4/rpc_server/dnsserver/dnsdb.c
@@ -395,7 +395,7 @@ WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
                                        const char *name,
                                        struct DNS_RPC_RECORD *add_record)
 {
-       const char * const attrs[] = { "dnsRecord", NULL };
+       const char * const attrs[] = { "dnsRecord", "dNSTombstoned", NULL };
        struct ldb_result *res;
        struct dnsp_DnssrvRpcRecord *rec;
        struct ldb_message_element *el;
@@ -404,6 +404,7 @@ WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
        NTTIME t;
        int ret, i;
        int serial;
+       bool was_tombstoned = false;
 
        rec = dns_to_dnsp_copy(mem_ctx, add_record);
        W_ERROR_HAVE_NO_MEMORY(rec);
@@ -452,6 +453,12 @@ WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
                }
        }
 
+       was_tombstoned = ldb_msg_find_attr_as_bool(res->msgs[0],
+                                                  "dNSTombstoned", false);
+       if (was_tombstoned) {
+               el->num_values = 0;
+       }
+
        for (i=0; i<el->num_values; i++) {
                struct dnsp_DnssrvRpcRecord rec2;
 
@@ -482,6 +489,12 @@ WERROR dnsserver_db_add_record(TALLOC_CTX *mem_ctx,
        }
 
        el->flags = LDB_FLAG_MOD_REPLACE;
+
+       el = ldb_msg_find_element(res->msgs[0], "dNSTombstoned");
+       if (el != NULL) {
+               el->flags = LDB_FLAG_MOD_DELETE;
+       }
+
        ret = ldb_modify(samdb, res->msgs[0]);
        if (ret != LDB_SUCCESS) {
                return WERR_INTERNAL_DB_ERROR;
@@ -520,7 +533,7 @@ WERROR dnsserver_db_update_record(TALLOC_CTX *mem_ctx,
        arec->dwTimeStamp = t;
 
        ret = ldb_search(samdb, mem_ctx, &res, z->zone_dn, LDB_SCOPE_ONELEVEL, 
attrs,
-                       "(&(objectClass=dnsNode)(name=%s))", name);
+                       
"(&(objectClass=dnsNode)(name=%s)(!(dNSTombstoned=TRUE)))", name);
        if (ret != LDB_SUCCESS) {
                return WERR_INTERNAL_DB_ERROR;
        }


-- 
Samba Shared Repository

Reply via email to