[SCM] Samba Shared Repository - branch master updated
Andrew Tridgell
tridge at samba.org
Tue Dec 21 04:06:02 MST 2010
The branch, master has been updated
via 901f348 s4-dns: set dwSerial and dwFlags
via f2dea30 s4-dns: fixed name comparison in bind9 module
via e7b1aca dns: cope with trailing '.' in dns_name
via 8466027 s4-dns: return the local hostname as the SOA authority
via f9e2a92 s4-provision: removed an incorrect debug message
via da5c328 s4-dns: disable segfault handling in dlz_bind9
from 71d0fd8 s4:auth/session.h - use a forward declaration for type "struct ldb_context"
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 901f34840b0cd3dc197828d642b7b5e882e8fc00
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 20:53:58 2010 +1100
s4-dns: set dwSerial and dwFlags
we are waiting on full docs on these, but this is better than zero
Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>
Autobuild-User: Andrew Tridgell <tridge at samba.org>
Autobuild-Date: Tue Dec 21 12:05:51 CET 2010 on sn-devel-104
commit f2dea305f4bd263325076c8ec21e31fa40d37168
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 20:53:11 2010 +1100
s4-dns: fixed name comparison in bind9 module
we need to compare without the trailing '.'
Pair-Programmed-With: Andrew Bartlett <abartlet at samba.org>
commit e7b1acaddf2ccc7de0301cc67f72187ab450e7b5
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 20:52:24 2010 +1100
dns: cope with trailing '.' in dns_name
commit 8466027bf91b83076b5d42b6d8cee90897930c1c
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 13:26:15 2010 +1100
s4-dns: return the local hostname as the SOA authority
this is done by all DCs in the domain to ensure that updates go to the
right place
commit f9e2a92881c7e72d154274d75eff0ebd24316816
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 12:42:49 2010 +1100
s4-provision: removed an incorrect debug message
this is now used as part of the main join
commit da5c328b4b4a793053a8b1c942ceda56da01625c
Author: Andrew Tridgell <tridge at samba.org>
Date: Tue Dec 21 12:42:23 2010 +1100
s4-dns: disable segfault handling in dlz_bind9
we don't want bind9 calling the Samba segv handler
-----------------------------------------------------------------------
Summary of changes:
lib/util/fault.c | 14 ++++++++-
lib/util/util.h | 1 +
librpc/ndr/ndr_dnsp.c | 8 +++++-
source4/dns_server/dlz_bind9.c | 57 ++++++++++++++++++++++++++++++++++-----
source4/param/provision.c | 2 -
5 files changed, 69 insertions(+), 13 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/util/fault.c b/lib/util/fault.c
index bbb3190..256e55a 100644
--- a/lib/util/fault.c
+++ b/lib/util/fault.c
@@ -187,9 +187,10 @@ setup our fault handlers
**/
_PUBLIC_ void fault_setup(const char *pname)
{
- if (progname == NULL) {
- progname = pname;
+ if (progname != NULL) {
+ return;
}
+ progname = pname;
#ifdef SIGSEGV
CatchSignal(SIGSEGV, sig_fault);
#endif
@@ -205,6 +206,15 @@ _PUBLIC_ void fault_setup(const char *pname)
}
/**
+ disable setting up fault handlers
+**/
+_PUBLIC_ void fault_setup_disable(void)
+{
+ progname = "fault disabled";
+}
+
+
+/**
register a fault handler.
Should only be called once in the execution of smbd.
*/
diff --git a/lib/util/util.h b/lib/util/util.h
index 0073aa9..86bb3da 100644
--- a/lib/util/util.h
+++ b/lib/util/util.h
@@ -87,6 +87,7 @@ _PUBLIC_ _NORETURN_ void smb_panic(const char *why);
setup our fault handlers
**/
_PUBLIC_ void fault_setup(const char *pname);
+_PUBLIC_ void fault_setup_disable(void);
#endif
/**
diff --git a/librpc/ndr/ndr_dnsp.c b/librpc/ndr/ndr_dnsp.c
index ae78425..daf8fff 100644
--- a/librpc/ndr/ndr_dnsp.c
+++ b/librpc/ndr/ndr_dnsp.c
@@ -95,7 +95,13 @@ enum ndr_err_code ndr_push_dnsp_name(struct ndr_push *ndr, int ndr_flags, const
for (count=i=0; name[i]; i++) {
if (name[i] == '.') count++;
}
- total_len = strlen(name) + 1 + 1;
+ total_len = strlen(name) + 1;
+
+ /* cope with names ending in '.' */
+ if (name[strlen(name)-1] != '.') {
+ total_len++;
+ count++;
+ }
if (total_len > 255 || count > 255) {
return ndr_push_error(ndr, NDR_ERR_BUFSIZE,
"dns_name of length %d larger than 255", total_len);
diff --git a/source4/dns_server/dlz_bind9.c b/source4/dns_server/dlz_bind9.c
index dc4c4bc..83790c8 100644
--- a/source4/dns_server/dlz_bind9.c
+++ b/source4/dns_server/dlz_bind9.c
@@ -38,6 +38,7 @@ struct dlz_bind9_data {
struct tevent_context *ev_ctx;
struct loadparm_context *lp;
int *transaction_token;
+ uint32_t soa_serial;
/* helper functions from the dlz_dlopen driver */
void (*log)(int level, const char *fmt, ...);
@@ -144,10 +145,28 @@ static bool b9_format(struct dlz_bind9_data *state,
*data = rec->data.ns;
break;
- case DNS_TYPE_SOA:
+ case DNS_TYPE_SOA: {
+ const char *mname;
*type = "soa";
+
+ /* we need to fake the authoritative nameserver to
+ * point at ourselves. This is now AD DNS servers
+ * force clients to send updates to the right local DC
+ */
+ mname = talloc_asprintf(mem_ctx, "%s.%s",
+ lpcfg_netbios_name(state->lp), lpcfg_dnsdomain(state->lp));
+ if (mname == NULL) {
+ return false;
+ }
+ mname = strlower_talloc(mem_ctx, mname);
+ if (mname == NULL) {
+ return false;
+ }
+
+ state->soa_serial = rec->data.soa.serial;
+
*data = talloc_asprintf(mem_ctx, "%s %s %u %u %u %u %u",
- rec->data.soa.mname,
+ mname,
rec->data.soa.rname,
rec->data.soa.serial,
rec->data.soa.refresh,
@@ -155,6 +174,7 @@ static bool b9_format(struct dlz_bind9_data *state,
rec->data.soa.expire,
rec->data.soa.minimum);
break;
+ }
default:
state->log(ISC_LOG_ERROR, "samba b9_putrr: unhandled record type %u",
@@ -413,6 +433,8 @@ static isc_result_t parse_options(struct dlz_bind9_data *state,
struct poptOption **popt_options;
int ret;
+ fault_setup_disable();
+
popt_options = ldb_module_popt_options(state->samdb);
(*popt_options) = long_options;
@@ -1066,6 +1088,21 @@ static isc_result_t b9_add_record(struct dlz_bind9_data *state, const char *name
return ISC_R_SUCCESS;
}
+/*
+ see if two DNS names are the same
+ */
+static bool dns_name_equal(const char *name1, const char *name2)
+{
+ size_t len1 = strlen(name1);
+ size_t len2 = strlen(name2);
+ if (name1[len1-1] == '.') len1--;
+ if (name2[len2-1] == '.') len2--;
+ if (len1 != len2) {
+ return false;
+ }
+ return strncasecmp_m(name1, name2, len1) == 0;
+}
+
/*
see if two dns records match
@@ -1088,31 +1125,31 @@ static bool b9_record_match(struct dlz_bind9_data *state,
case DNS_TYPE_AAAA:
return strcmp(rec1->data.ipv6, rec2->data.ipv6) == 0;
case DNS_TYPE_CNAME:
- return strcmp(rec1->data.cname, rec2->data.cname) == 0;
+ return dns_name_equal(rec1->data.cname, rec2->data.cname);
case DNS_TYPE_TXT:
return strcmp(rec1->data.txt, rec2->data.txt) == 0;
case DNS_TYPE_PTR:
return strcmp(rec1->data.ptr, rec2->data.ptr) == 0;
case DNS_TYPE_NS:
- return strcmp(rec1->data.ns, rec2->data.ns) == 0;
+ return dns_name_equal(rec1->data.ns, rec2->data.ns);
case DNS_TYPE_SRV:
return rec1->data.srv.wPriority == rec2->data.srv.wPriority &&
rec1->data.srv.wWeight == rec2->data.srv.wWeight &&
rec1->data.srv.wPort == rec2->data.srv.wPort &&
- strcmp(rec1->data.srv.nameTarget, rec2->data.srv.nameTarget) == 0;
+ dns_name_equal(rec1->data.srv.nameTarget, rec2->data.srv.nameTarget);
case DNS_TYPE_MX:
return rec1->data.mx.wPriority == rec2->data.mx.wPriority &&
- strcmp(rec1->data.mx.nameTarget, rec2->data.mx.nameTarget) == 0;
+ dns_name_equal(rec1->data.mx.nameTarget, rec2->data.mx.nameTarget);
case DNS_TYPE_HINFO:
return strcmp(rec1->data.hinfo.cpu, rec2->data.hinfo.cpu) == 0 &&
strcmp(rec1->data.hinfo.os, rec2->data.hinfo.os) == 0;
case DNS_TYPE_SOA:
- return strcmp(rec1->data.soa.mname, rec2->data.soa.mname) == 0 &&
- strcmp(rec1->data.soa.rname, rec2->data.soa.rname) == 0 &&
+ return dns_name_equal(rec1->data.soa.mname, rec2->data.soa.mname) &&
+ dns_name_equal(rec1->data.soa.rname, rec2->data.soa.rname) &&
rec1->data.soa.serial == rec2->data.soa.serial &&
rec1->data.soa.refresh == rec2->data.soa.refresh &&
rec1->data.soa.retry == rec2->data.soa.retry &&
@@ -1153,6 +1190,10 @@ _PUBLIC_ isc_result_t dlz_addrdataset(const char *name, const char *rdatastr, vo
return ISC_R_NOMEMORY;
}
+ /* we're waiting on docs for this field */
+ rec->dwFlags = 0x0000f005;
+ rec->dwSerial = state->soa_serial;
+
if (!b9_parse(state, rdatastr, rec)) {
state->log(ISC_LOG_INFO, "samba_dlz: failed to parse rdataset '%s'", rdatastr);
talloc_free(rec);
diff --git a/source4/param/provision.c b/source4/param/provision.c
index f1ef695..4ae1971 100644
--- a/source4/param/provision.c
+++ b/source4/param/provision.c
@@ -343,8 +343,6 @@ struct ldb_context *provision_get_schema(TALLOC_CTX *mem_ctx, struct loadparm_co
const char *setupdir;
PyObject *schema_mod, *schema_dict, *schema_fn, *py_result, *parameters;
- DEBUG(0,("Schema for DRS tests using python\n"));
-
Py_Initialize();
py_update_path("bin"); /* FIXME: Can't assume this is always the case */
--
Samba Shared Repository
More information about the samba-cvs
mailing list