s4:join.py - fix up "DsAddEntry" against Windows Server 2000
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Wed, 9 Nov 2011 08:32:55 +0000 (09:32 +0100)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Wed, 9 Nov 2011 22:37:08 +0000 (23:37 +0100)
It is important to consider the result level regarding error
information. Windows 2000 seems to send us back v2, all other
implementations v3. Consider post "Joining W2k AD domain"

Reviewed-by: abartlet
Autobuild-User: Matthias Dieter Wallnöfer <mdw@samba.org>
Autobuild-Date: Wed Nov  9 23:37:08 CET 2011 on sn-devel-104

source4/scripting/python/samba/join.py

index 7ce53442a487673766f9264bd2f6a166590c6b31..96b07a6fbf0b38725f05238332dd156073c0c1e8 100644 (file)
@@ -363,15 +363,24 @@ class dc_join(object):
             prev = o
 
         (level, ctr) = ctx.drsuapi.DsAddEntry(ctx.drsuapi_handle, 2, req2)
-        if ctr.err_ver != 1:
-            raise RuntimeError("expected err_ver 1, got %u" % ctr.err_ver)
-        if ctr.err_data.status != (0, 'WERR_OK'):
-            print("DsAddEntry failed with status %s info %s" % (ctr.err_data.status,
-                                                                ctr.err_data.info.extended_err))
-            raise RuntimeError("DsAddEntry failed")
-        if ctr.err_data.dir_err != drsuapi.DRSUAPI_DIRERR_OK:
-            print("DsAddEntry failed with dir_err %u" % ctr.err_data.dir_err)
-            raise RuntimeError("DsAddEntry failed")
+        if level == 2:
+            if ctr.dir_err != drsuapi.DRSUAPI_DIRERR_OK:
+                print("DsAddEntry failed with dir_err %u" % ctr.dir_err)
+                raise RuntimeError("DsAddEntry failed")
+            if ctr.extended_err != (0, 'WERR_OK'):
+                print("DsAddEntry failed with status %s info %s" % (ctr.extended_err))
+                raise RuntimeError("DsAddEntry failed")
+        if level == 3:
+            if ctr.err_ver != 1:
+                raise RuntimeError("expected err_ver 1, got %u" % ctr.err_ver)
+            if ctr.err_data.status != (0, 'WERR_OK'):
+                print("DsAddEntry failed with status %s info %s" % (ctr.err_data.status,
+                                                                    ctr.err_data.info.extended_err))
+                raise RuntimeError("DsAddEntry failed")
+            if ctr.err_data.dir_err != drsuapi.DRSUAPI_DIRERR_OK:
+                print("DsAddEntry failed with dir_err %u" % ctr.err_data.dir_err)
+                raise RuntimeError("DsAddEntry failed")
+
         return ctr.objects
 
     def join_add_ntdsdsa(ctx):