-
Notifications
You must be signed in to change notification settings - Fork 10
Description
We've started running into issues with domains where we have multiple main DCs at all times, where joins tend to fail with a nonsensical authentication error - the object is created fine but the password fails to be set.
From the debugging I've done it seems to occur when the ticket for the password change is provided by a different DC than the one the actual request ends up going to.
The bug at https://bugs.freedesktop.org/show_bug.cgi?id=55487 sounds like it's exactly what we're running into.
My workaround as of so far has been to retry the password setting until successful, which works but is not at all a nice workaround - and not something I particularly want to encourage with a PR;
diff --git a/lib/smart_proxy_realm_ad/provider.rb b/lib/smart_proxy_realm_ad/provider.rb
index 640fadc..d26f424 100644
--- a/lib/smart_proxy_realm_ad/provider.rb
+++ b/lib/smart_proxy_realm_ad/provider.rb
@@ -101,7 +101,24 @@ module Proxy::AdRealm
enroll.set_host_fqdn(hostfqdn)
enroll.set_domain_ou(@ou) if @ou
enroll.set_computer_password(password)
- enroll.join
+ begin
+ enroll.join
+ return true
+ rescue RuntimeError => ex
+ raise ex unless ex.message =~ /Authentication error/
+ loop do
+ begin
+ if enroll.respond_to? :update
+ enroll.update
+ else
+ enroll.password
+ end
+ return true
+ rescue RuntimeError => ex
+ raise ex unless ex.message =~ /Authentication error/
+ end
+ end
+ end
end
def generate_passwordThe question is then; is there a better workaround for such an issue that could be done? Perhaps by finding all available DCs using a DNS lookup, and then grabbing tickets for all of them?