Hi,
We were unable to use nsupdate-gss to a Windows 2003 Active Directory. I
modified the nsupdate-gss script to use the local Domain Controller to do
the DNS update and then it works (albeit giving a TKEY integrity error).
The patch attached adds a 5th argument to the command line to specify the
local Domain Controller to send the DNS update to.
Usage: nsupdate-gss.pl HOST DOMAIN IP TTL [NS]
Here is the example output when it fails:
----
[EMAIL PROTECTED] root]# nsupdate-gss rhun REALM.DOM 1.2.3.4 3600
Found 93 nameserver(s)
Using DNS server name somedc.REALM.DOM
creds acquired
init done
calling RR new
init_sec_context step 2: Unspecified GSS failure. Minor code may
provide more information
Message stream modified
Failed to negotiate a TKEY
----
And this is shown when it works (using the extra argument):
----
[EMAIL PROTECTED] redhat]# nsupdate-gss rhun REALM.DOM 1.2.3.4 3600
localdc.REALM.DOM
Found 1 nameserver(s)
Using DNS server name localdc.REALM.DOM
creds acquired
init done
calling RR new
verifying
calling sig_data
Use of uninitialized value in pack at
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/Net/DNS/RR/TKEY.pm
line 104.
sig_data_done
Failed to verify TKEY reply: A token had an invalid Message Integrity
Check (MIC)
No error
verifying done
Negotiated TKEY 9019541380429
Update gave rcode NOERROR
----
(Beware IANAADE: I Am Not an Active Directory Expert)
Apparently with Active Directory and Sites and Services enabled you can
not just update using any Domain Controller but instead you need to use
the local one. Apparently there is a mapping between routes and "Sites"
that contain local DCs and only these allow to updates the DNS.
As a result the normal nsupdate-gss fails. I've tested with Samba 3.0.25b
as well and that fails too, most likely because it tries one out of the 93
Domain Controllers we have.
I've tried to look into finding who my local DCs are from DNS information,
but as far as I can see there is no query to link the local route with a
"Site".
I was wondering of someone knows exactly how this is supposed to work ?
How can we register the hostname with Active Directory DNS ? And how can
we make this information persistent ? (ie. if DHCP provides a new IP,
update the DNS accordingly)
I also fail to see how the Kerberos credentials can be persistent for this
functionality to work without someone providing a user password. Even an
ADS join requires a password every time again.
Is there anyone with a clue ? Or is there any documentation I failed to
Google for ?
Thanks in advance :)
-- dag wieers, [EMAIL PROTECTED], http://dag.wieers.com/ --
[Any errors in spelling, tact or fact are transmission errors]
--- /usr/src/redhat/SOURCES/nsupdate-gss 2006-01-23 06:35:10.000000000
+0100
+++ /usr/bin/nsupdate-gss 2007-08-01 13:28:39.000000000 +0200
@@ -5,6 +5,9 @@
# [EMAIL PROTECTED]
# updated, 2004-Enero
+# [EMAIL PROTECTED]
+# updated, 2007-EMC
+
# See draft-ietf-dnsext-gss-tsig-02, RFC2845 and RFC2930
@@ -20,9 +23,9 @@
# Integrity of the arguments
-if ($#ARGV != 3) {
+if ($#ARGV < 3) {
print "
-Usage: nsupdate-gss.pl HOST DOMAIN IP TTL
+Usage: nsupdate-gss.pl HOST DOMAIN IP TTL [NS]
";
exit 1;
}
@@ -35,6 +38,7 @@
my $ip = $ARGV[2];
my $ttl = $ARGV[3];
my $alg = "gss.microsoft.com";
+my $ns = $ARGV[4] if ($#ARGV >= 4);
@@ -229,7 +233,11 @@
# find the nameservers
my $nameserver = find_nameservers("$domain.");
-print "Found nameserver $nameserver\n";
+$nameserver->nameservers("$ns") if (defined($ns));
+#print $nameserver->print;
+
+#print "Found nameserver $nameserver\n";
+print "Found ".$nameserver->nameservers." nameserver(s)\n";
if (!defined($nameserver) || $nameserver->{'errorstring'} ne 'NOERROR') {
print "Failed to find a nameserver for domain $domain\n";
@@ -238,6 +246,8 @@
# find the name of the DNS server
my $server_name = find_server_name($domain);
+$server_name = $ns if (defined($ns));
+
if (!defined($server_name)) {
print "Failed to find a DNS server name for $domain\n";
exit 1;
--
To unsubscribe from this list go to the following URL and read the
instructions: https://lists.samba.org/mailman/listinfo/samba