diff options
| author | Stefan Metzmacher <metze@samba.org> | 2014-09-04 07:19:46 +0200 |
|---|---|---|
| committer | Amitay Isaacs <amitay@samba.org> | 2014-09-04 12:07:13 +0200 |
| commit | 2c342e488dcd3cef465a1b376bb22bf495f6832b (patch) | |
| tree | c40904bb62ebef3fd9b0406135245ba667e2ac59 /source4/rpc_server/dnsserver | |
| parent | 6f2862e76608862bb4142a86f36c8506114bf6c7 (diff) | |
| download | samba-2c342e488dcd3cef465a1b376bb22bf495f6832b.tar.gz samba-2c342e488dcd3cef465a1b376bb22bf495f6832b.tar.xz samba-2c342e488dcd3cef465a1b376bb22bf495f6832b.zip | |
s4-rpc: dnsserver: handle updates of tombstoned dnsNode objects
Bug: https://bugzilla.samba.org/show_bug.cgi?id=10749
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'source4/rpc_server/dnsserver')
| -rw-r--r-- | source4/rpc_server/dnsserver/dnsdb.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/source4/rpc_server/dnsserver/dnsdb.c b/source4/rpc_server/dnsserver/dnsdb.c index 24e9e89c02..e567f5a4f8 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; } |
